Делегат FormClosing не работает с методом ShowDialog () - PullRequest
0 голосов
/ 08 мая 2011

В моей программе C # WinForms у меня есть несколько форм, и я показываю одну из них в виде диалога:

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

Но когда я пытаюсь назначить им событие закрытия формы, оно не работает;

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

В чем проблема?

P.S .: Он отлично работает, когда я вызываю форму с помощью метода mf.Show ().

Спасибо.

Ответы [ 3 ]

5 голосов
/ 08 мая 2011

«Не работает» безнадежно неоднозначно. В вашем фрагменте отсутствует точка с запятой. Догадываясь, не назначайте событие FormClosing после , вызывающего ShowDialog (), это слишком поздно. Это отлично работает:

    private void button1_Click(object sender, EventArgs e) {
        using (var mf = new Form2()) {
            mf.FormClosing += delegate { MessageBox.Show("Dialog is closed."); };
            mf.ShowDialog();
        }
    }
4 голосов
/ 08 мая 2011

Какую последовательность вы используете?Сначала вы должны зарегистрировать событие, затем вызвать mf.ShowDialog ().

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

Вы пишете в MessageBox " Диалог закрыт ", но вы регистрируетесь на FormClosing.Обратите внимание, что существует FormClosed и FormClosing - событие.Это разные события.

2 голосов
/ 08 мая 2011

В качестве теста попробуйте изменить 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

...