为什么我的C#表格在显示时关闭?

时间:2011-11-28 07:11:21

标签: c# forms dispose show

我有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显示,它突然关闭。有谁知道如何解决这个问题?

5 个答案:

答案 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()来隐藏当前表单或使用线程打开新表单。

示例:C# open a new form, and close a form...