[英]Maintain the changes after hiding and re-open form c# visual studio Windows Forms App
我有一个程序有 5 个 forms。 表格 1 是一个带有 4 个按钮的“菜单”,每个按钮打开一个新表格。 但我希望能够对这些 forms(2 到 5)上的datagridviews
进行一些更改,单击这些 forms、go 上的按钮,然后在隐藏时单击菜单按钮回来,我想仍然有我在datagridview
上所做的更改。
我的问题是我在datagridview
中有默认值,如果我添加行、删除行或更改某些单元格,然后单击 go 按钮到“菜单”
this.Hide();
Form1 sistema = new Form1 ();
sistema.ShowDialog();
然后回来
this.Hide();
Form2 sistema = new Form2 ();
sistema.ShowDialog();
this.Close();
, datagridview
更改为它的默认值。 所以我想,例如,隐藏form2
而不关闭并稍后返回,而不再次加载 form2,以便datagridview
保持不变。
任何帮助表示赞赏。
这是因为您一直在创建新的 forms 而不是再次显示隐藏的 forms。
您可以在 class Program
中存储对 forms 的引用,如下所示:
static class Program
{
public static Form1 Form1 { get; private set; } // Add these two lines
public static Form2 Form2 { get; private set; }
[STAThread]
static void Main()
{
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 = new Form1(); // Add this two lines
Form2 = new Form2();
Application.Run(Form1); // <= Change this line
}
}
现在你的两个代码片段变成了这样
this.Hide();
Program.Form1.ShowDialog();
然后回来
this.Hide();
Program.Form2.ShowDialog();
this.Close(); // After having done this, you can't show it again!
IE,您访问现有的表单对象而不是创建一个新的对象,然后使用.Show()
或.ShowDialog()
再次显示它们。
另一种解决方案是在另一个表单的构造函数中传递一个表单
private Form2 _form2;
public Form1(Form2 form2)
{
_form2 = form2;
InitializeComponent();
}
您可以通过私有字段访问它
_form2.ShowDialog();
您可以使用Application.OpenForms 属性来获取隐藏表单的实例。
// button in form1: hide the form1
private void btnHide_Click(object sender, EventArgs e)
{
this.Hide();
Form2 form2 = new Form2();
form2.Show();
}
// button in form2: reopen the form1
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = (Form1)Application.OpenForms["Form1"];
form1.Show();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.