我有2个表单,分别是form1.cs和form2.cs
在form1上的,它有button1,它将调用form2来显示
这是button1代码
private void button1_Click(Object sender, EventArgs e )
{
form2 form = new form2();
form2.show(); // to call form2
this.dispose(); //to dispose form1
}
然后form2显示,它突然关闭。有谁知道如何解决这个问题?
答案 0 :(得分:3)
当您使用this.dispose()
关闭主窗体时,您正在终止程序,导致form2也被处理掉,因为您正在放弃对form2的引用。最好将对form1的引用传递给form2并使用this.Hide()
代替。
您可以尝试这样的事情:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.setParent(this);
form.Show();
this.Hide();
}
}
并在form2中返回form1
public partial class Form2 : Form
{
Form parentForm;
public Form2()
{
InitializeComponent();
}
public void setParent(Form value)
{
parentForm = value;
}
private void button1_Click(object sender, EventArgs e)
{
parentForm.Show();
this.Close();
}
}
答案 1 :(得分:2)
private void button1_Click(Object sender, EventArgs e )
{
form2 form = new form2();
form2.show(); // to call form2
this.hide(); //to hide form1
}
答案 2 :(得分:0)
如果form1是程序启动器,则应用程序将关闭。因此,
this.dispose();
你刚写
this.hide();
答案 3 :(得分:0)
在继续执行下一个命令(dispose)之前,Show()不会等待form2关闭。 这将最终关闭form2,因为它可能在后台线程上运行。
使用ShowDialog保持Dispose的执行,直到第二个表单关闭。
此外,您可以将第二个表单设置为在前台线程上运行。这样,第二种形式将不依赖于第一种形式的生命。
答案 4 :(得分:0)
您可以使用this.Hide()来隐藏当前表单或使用线程打开新表单。