C# 如何在窗体关闭时打开新窗口?

C# 如何在窗体关闭时打开新窗口?,c#,winforms,C#,Winforms,如何在关闭按钮上打开表格1单击表格2中的X 我尝试过这个,但不起作用: private void supplierShow_FormClosing(object sender, EventArgs e) { new suppliersList().Show(); } 谢谢。在不了解更多代码的情况下无法完全确定,但在我看来,您似乎在声明一个局部变量(可能是基类表单的新供应商列表),并从另一个表单的关闭事件中显示表单 您的Form2对象可能很快将被删除/处置/垃圾收集,此时我不能完全确定在

如何在关闭按钮上打开表格1单击表格2中的X 我尝试过这个,但不起作用:

private void supplierShow_FormClosing(object sender, EventArgs e)
{
    new suppliersList().Show();
}

谢谢。

在不了解更多代码的情况下无法完全确定,但在我看来,您似乎在声明一个局部变量(可能是基类表单的新供应商列表),并从另一个表单的关闭事件中显示表单

您的Form2对象可能很快将被删除/处置/垃圾收集,此时我不能完全确定在该范围内声明的表单是否仍然有良好的使用寿命

如果Form2是应用程序表单,那么当您关闭它时,应用程序实际上将终止

一般来说,我认为这种形式的转换最好从main方法开始进行和控制,在这里您可能有
Application.Run(newform2())因为在这里,您可以完全控制应用程序流和消息循环…

我必须:

第一名:

在程序类中,您可能对供应商列表有唯一的引用:

public static suppliersList SuppList = new suppliersList();
如果需要,现在可以将其隐藏:

Program.SuppList.Hide();
您也可以随时显示:

Program.SuppList.Show()

小心点!不要
Dispose
SuppList。如果有,则为其分配一个新对象
newsupplierslist()。请注意,只有当form1不是主窗体时,此解决方案才会成功(即
Application.Run(new form1());

秒:

您可以作为
form1
窗口的子窗口启动
form2

new suppliersList().Show(this);
因为,正如在另一个答案中一样,应用程序循环位于form1上。如果form1关闭,那么整个应用程序也将关闭。但是,启动主窗口的子窗口将阻止应用程序关闭


如果答案对您有用,请将其标记为您的最佳答案。

您是否在任何地方注册了关闭事件?需要在哪里注册?您需要有一个
this.close+=supplierShow\u FormClosing某处。看到这个:谢谢,但需要使用它。Closing+=供应商show\u FormClosing;不,实际上使用FormClosing事件。当用户关闭Windows时,您不希望显示新窗体。注意已通过的e.CloseReason。使用属性窗口中的闪电图标,双击FormClosing以获得正确的结果。它不是应用程序循环,而是消息泵。我不喜欢你的第一个选择。我更喜欢你的第二个,但我仍然不会在关闭时创建一个新的子对象,这一点最好是隐藏而不是关闭。@Davide是的。他还可以用e.Cancelled=false取消结账;然后把表格藏起来,然后他可以展示他的表格2…哦哦。表单关闭后将从MDSN中进行处理。我将编辑答案。