在运行时更改应用程序MainForm

时间:2015-11-11 11:22:34

标签: c# winforms

我想点击按钮重新启动我的主表单。例如:

program.cs:

Application.Run(new MainForm(data))

MainForm.cs:

private void btn1_Click(object sender, EventArgs e)
{
    MainForm newForm = new MainForm(newData);
    this.close();
    Application.Run(newForm);
}

这样我的新主窗口就是MainForm的新实例。我怎么能以第一个实例从内存中清除的方式做到这一点?

EDIT 即我希望MainForm的第一个实例完全消失 - 就像调用this.Hide()一样吗?或者调用this.Close()然后进行设置,以便应用程序仅在最后一个窗口关闭时退出,而不是在主窗口关闭时退出?

2 个答案:

答案 0 :(得分:2)

没有。在单个线程上启动第二个消息循环不是有效的操作。您可以改为使用Form.ShowDialog

Hide();
MainForm newForm = new MainForm(newData);
newForm.Closed += (s, args) => Close();
newForm.ShowDialog();

或者,如果您要关闭旧实例:

Hide();
MainForm newForm = new MainForm(newData);
newForm.ShowDialog();
Close();

答案 1 :(得分:0)

  

“这可能吗?”

NO。
通常,您应该运行样本并进行测试。然后你会自己回答这个问题 你会想要做的事情:

private void button_click(object sender, RoutedEventArgs e)
{
    NextWindow window = new NextWindow();
    window.Show();
    this.Close();
}