Windows窗体窗体关闭事件无法与打开新窗体一起使用

时间:2019-04-25 20:34:07

标签: c# forms

我有一些代码打算在关闭一个新的Windows窗体时打开,但是我什么也没收到,没有错误。

我尝试了几种不同的方法来在Form.FormClosed事件上打开新表单。

这是我现在拥有的代码:

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    Form1 myForm = new Form1();
    myForm.Show();
}

但是我没有任何错误,没事。

我希望在关闭另一个窗口时会打开一个新窗口。 任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

问题在于,第一个Form1实例关闭后,您的应用程序将关闭并退出,因为应用程序消息循环是由初始Form实例定义的,并且它只是在等待事件直到表格关闭为止。关闭后,应用程序将退出,打开新表单不会停止该过程。

您需要调整Main()中的Program.cs方法,使其看起来像这样:

[STAThread]
static void Main()
{
    // ... Application configuration as required here

    new Form1().Show(); // The first form instance is now no longer bound to the Application message loop.  Start it before we begin the run loop
    Application.Run(); // Don't pass in Form1
}

您的原始代码现在应该可以使用了。但是,我可能会补充说,这不是很好的用户体验。仔细考虑您要实现的目标,并考虑替代方法-您是否只需要“重置表单”按钮?还是防止用户关闭应用程序的主要目标?如果是后者,则可以完全remove the Close icon

答案 1 :(得分:0)

也许一些简单的方法可以使您前进。

private Form1 myForm = new Form1(); //Declare the form as a private member variable

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    e.Cancel = true;       //Cancel the closing so this object stays alive
    this.Visible = false;  //Hide this form
    myForm.Show();         //Show the next form
}

请注意@pcdevs评论。您将需要一种方法来指示表单已关闭/正在退出应用程序还是正在前进到下一步/表单。您可能想看一些有关“ C#Winform向导”的CodeProject文章,这些顺序对话框提示应用程序...