FormClosing委托不使用ShowDialog()方法

时间:2011-05-08 19:50:41

标签: c# winforms delegates showdialog formclosing

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

MyForm mf = new MyForm();
mf.ShowDialog();

但是当我尝试为他们分配一个表单结束事件时,它无效;

mf.FormClosing += delegate { MessageBox.Show("Dialog is closed.")};

有什么问题?

P.S:当我使用mf.Show()方法调用表单时,它工作正常。

感谢。

3 个答案:

答案 0 :(得分:5)

“不工作”无可救药地模棱两可。您的片段中缺少一个分号。不得不猜测,在调用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();
        }
    }

答案 1 :(得分:4)

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

MyForm mf = new MyForm();
mf.FormClosing += delegate { MessageBox.Show("Dialog is closed.")};
mf.ShowDialog();

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

答案 2 :(得分:2)

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

http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-vb/56720/If-I-want-FormClosing-and-FormClose-to-run-am-I-suppose-to-call