c# - 在运行时更改应用程序 MainForm

标签 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 的新实例。我怎样才能从内存中清除第一个实例?

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

最佳答案

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

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

或者如果您想关闭旧实例:

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

关于c# - 在运行时更改应用程序 MainForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33649493/

相关文章:

c# - 您如何将验证消息组合在一起?

c# - 如何检查对象是否派生自接口(interface)?

c# - 添加 MouseDown 事件后 Winform MouseDoubleClick 事件未触发

c# - 隐藏 C# 窗体中的调整大小箭头

vb.net - CellEndEdit 之后的 DataGridView SetFocus

c# - 如何在 TreeView 的每个节点旁边添加一个按钮?

c# - WebAPI POST [FromBody] 未绑定(bind)

c# - Ok() 怎么可能既是 Task<IActionResult> 又是 IActionResult?

c# - 使用 C# 在 Windows 7 中创建 Metro 风格的 Winform

c# - 如何捕捉 C# .NET 窗体上的按键