Form.closed事件未触发

时间:2010-12-04 10:33:47

标签: c# .net winforms events event-handling

每当我点击表单的红十字关闭按钮时,我想显示另一个表单,但是尽管已关闭事件处理程序,我无法打开另一个表单。

这就是我试图打开另一种形式的方式:

private void Form1_Closed(object sender, System.EventArgs e)
{
     itemMaster.Show();

}

有人可以告诉我如何才能启用我的要求?

3 个答案:

答案 0 :(得分:5)

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

  

Closed事件在.NET Framework 2.0版中已过时;请改用FormClosed事件。 - MSDN page for the Form.Closed event

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

其次,请确保您实际订阅了Form1的{​​{1}}个活动:

FormClosed

Windows窗体设计器应该在Form1.FormClosed += Form1_FormClosed; 中的某处自动添加类似的行。如果没有,那就是你的处理程序方法没有被调用的原因。

如果这仍无效,请尝试处理InitializeComponent的{​​{3}}事件。

答案 1 :(得分:4)

如果您已使用以下声明启动了您的申请:

Application.Run(new Form1());

当您关闭Form1时,您的应用程序将退出。即使您打开另一个表单,它也会在应用程序退出时被终止。你可以通过在Form1_Closed方法中设置一个断点并看到断点被击中来确定是这种情况吗?

如果是这种情况,那么您的代码会执行会发生什么,但是自应用程序退出后,您的另一个表单也会在打开后立即关闭。

要修复它,Hide() form1而不是关闭它。处理Form_Closing个活动并致电this.Hide()并设置e.Cancel = true

答案 2 :(得分:0)

如果您已完成表单并想关闭它(例如,点击关闭按钮),请务必使用Close()。我的form_closing事件未被触发,因为我在点击关闭按钮时仅使用Dispose()

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

  • Close() =>如果你在关闭表格时需要做某事......
  • Dispose() =>破坏形式(清理资源)。

    private void _btnClose_Click(object sender,EventArgs e) {     关();     处置(); }