C# FormClosing委托不使用ShowDialog()方法

C# FormClosing委托不使用ShowDialog()方法,c#,winforms,delegates,showdialog,formclosing,C#,Winforms,Delegates,Showdialog,Formclosing,在我的C#WinForms程序中,我有一些表单,我将其中一个表单显示为对话框: MyForm mf = new MyForm(); mf.ShowDialog(); 但当我试图为他们分配一个表单关闭事件时,它不起作用 mf.FormClosing += delegate { MessageBox.Show("Dialog is closed.")}; 有什么问题 注意:当我使用mf.Show()方法调用表单时,它工作得很好 谢谢。您使用的顺序是什么?首先必须注册事件,然后调用mf.ShowD

在我的C#WinForms程序中,我有一些表单,我将其中一个表单显示为对话框:

MyForm mf = new MyForm();
mf.ShowDialog();
但当我试图为他们分配一个表单关闭事件时,它不起作用

mf.FormClosing += delegate { MessageBox.Show("Dialog is closed.")};
有什么问题

注意:当我使用mf.Show()方法调用表单时,它工作得很好


谢谢。

您使用的顺序是什么?首先必须注册事件,然后调用mf.ShowDialog()

您在消息框中写入“对话框已关闭”,但注册到
FormClosing
。请注意,有一个和一个事件。这是不同的事件。

“不工作”是不明确的。您的代码片段中缺少分号。不得不猜测,调用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();
        }
    }

作为测试,请尝试将
ShowDialog
更改为
Show
。行为(事件的触发方式)确实不同。您可能需要显式调用dispose方法


是的,它不会触发事件,使用您的代码,它现在可以工作了,谢谢。
    private void button1_Click(object sender, EventArgs e) {
        using (var mf = new Form2()) {
            mf.FormClosing += delegate { MessageBox.Show("Dialog is closed."); };
            mf.ShowDialog();
        }
    }