Form.closed事件未触发。

4
每当我点击表单的红色叉叉关闭按钮时,我希望显示另一个表单,但是尽管我有关闭事件处理程序,我仍然无法打开另一个表单。
这是我尝试打开另一个表单的方法:
private void Form1_Closed(object sender, System.EventArgs e)
{
     itemMaster.Show();

}

请问有人能告诉我如何启用我的要求吗?

3个回答

6

首先,您应该使用FormClosed事件而不是Closed事件:

.NET Framework 2.0中Closed事件已过时,应使用FormClosed事件。 — Form.Closed事件的MSDN页面

void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    // ...
}

其次,请确保您已经订阅了Form1FormClosed事件:

Form1.FormClosed += Form1_FormClosed;

Windows Forms设计器应该自动在InitializeComponent中的某个地方添加了类似的代码行。如果没有,那就是为什么你的处理程序方法没有被调用的原因。
如果这仍然没有帮助,请尝试处理FormClosing事件而不是FormClosed

4
如果您已经使用以下语句开始了您的应用程序:

Application.Run(new Form1());

当你关闭Form1时,你的应用程序将退出。即使你打开另一个表单,在应用程序退出时也会被杀死。您可以通过在Form1_Closed方法中设置断点并查看是否触发断点来确保这一点。
如果是这种情况,那么发生的是您的代码确实执行了,但由于应用程序退出,您的另一个表单在打开后立即关闭。
为了解决这个问题,请使用Hide()代替关闭Form1。处理Form_Closing事件并调用this.Hide()并设置e.Cancel = true

1

当你完成表单并想要关闭它(例如点击关闭按钮),一定要使用Close()。因为我只使用了Dispose(),所以我的form_closing事件没有触发。

我认为关闭窗体的最佳方式是同时使用Close()Dispose()

  • Close() => 如果需要在关闭窗体时执行某些操作...
  • Dispose() => 销毁窗体(清理资源)。

    private void _btnClose_Click(object sender, EventArgs e) { Close(); Dispose(); }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接