在我的 C# WinForms 程序中,我有一些表单,我将其中一个显示为对话框:
MyForm mf = new MyForm();
mf.ShowDialog();
但是当我尝试为他们分配一个表单关闭事件时,它不起作用;
mf.FormClosing += delegate { MessageBox.Show("Dialog is closed.")};
问题是什么?
PS:当我使用 mf.Show() 方法调用表单时,它工作正常。
谢谢。
在我的 C# WinForms 程序中,我有一些表单,我将其中一个显示为对话框:
MyForm mf = new MyForm();
mf.ShowDialog();
但是当我尝试为他们分配一个表单关闭事件时,它不起作用;
mf.FormClosing += delegate { MessageBox.Show("Dialog is closed.")};
问题是什么?
PS:当我使用 mf.Show() 方法调用表单时,它工作正常。
谢谢。
“不工作”是无可救药的模棱两可。您的代码段中缺少一个分号。不得不猜测,在调用 ShowDialog()之后不要分配 FormClosing 事件,那就太晚了。这工作正常:
private void button1_Click(object sender, EventArgs e) {
using (var mf = new Form2()) {
mf.FormClosing += delegate { MessageBox.Show("Dialog is closed."); };
mf.ShowDialog();
}
}
你使用的顺序是什么?首先您必须注册事件,然后调用 mf.ShowDialog()。
MyForm mf = new MyForm();
mf.FormClosing += delegate { MessageBox.Show("Dialog is closed.")};
mf.ShowDialog();
您在 MessageBox 中写入“对话框已关闭”,但您注册到FormClosing
. 请注意,有一个FormClosed和一个FormClosing事件。这是不同的事件。
作为测试,尝试更改ShowDialog
为Show
. 行为(如何触发事件)确实不同。您可能需要显式调用 dispose 方法。