2012-05-25 1 views
4

Я хочу показать MessageBox, чтобы подтвердить выход, прежде чем сдавать форму. Таким образом, создается событие FormClosing.Событие FormClosing() загружено дважды

private void Form_Main_FormClosing(object sender, FormClosingEventArgs e) 
    { 
    //nothing here for now 
    } 

У меня есть MessageBox, показанный дважды. Инструмент «Отладка» показывает, что каким-то образом код проходит через FormClosing() дважды. Это происходит даже тогда, когда у меня нет ничего внутри FormClosing(), как указано выше. Я искал FormClosing() во всем моем коде, и есть только одно место, на которое оно подписано. У меня есть тот же FormClosing() в двух других проектах, и этого не происходит. Может ли кто-нибудь дать мне указатель? Это не имеет никакого смысла для меня.

+1

Вы пытались восстановить решение? –

+2

Что скажешь о том, как он туда попал? –

+0

Можете ли вы разместить свой код. Если не код, то скелет хотя бы? –

ответ

2

Наиболее вероятным вариантом является то, что вы подписываетесь на событие дважды. Не забывайте проверять автоматически созданный код конструктора, если вы используете конструктор.

Если вы установили BreakPoint на событие - вы также можете потянуть стек вызовов (http://msdn.microsoft.com/en-us/library/a3694ts5.aspx - отладка/окно/стек вызовов) и вы можете увидеть, какой код был выполнен, чтобы добраться до того места, где вы находитесь.

Вы можете вызвать обработчик событий напрямую (но, вероятно, маловероятно, чтобы вы сделали это по ошибке); но просмотр стека вызовов может помочь отследить его.

И наконец - убедитесь, что вы не вызываете Application.Exit или аналогичные при обработке события закрытия - я считаю, что это может вызвать второй обстрел.

+0

OK, Чтобы сделать вещи проще, я загрузил свой код здесь: https://docs.google.com/open?id=0B3dcu0IKtxKxblRudlhVOE1rZWM Когда я использую This.Dispose(), он загружает в два раза. Когда я использую This.Close(), IT NEVER CLOSES. Прямо сейчас эта тайна пугает меня от меня. Никогда этого не было. У меня было два других приложения Form с тем же методом, и они отлично работали. ПОМОГИТЕ!!!!!!!! Призрачный внутри Visual Studio !!!!!! – CaTx

+0

Я искал Application.Exit before. Это не во всем решении. – CaTx

3

Вы не должны вызвать либо Close и Dispose методы обработчика событий FormClosing

Код закрытия формы должен быть:

private void Form_Main_FormClosing(object sender, FormClosingEventArgs e) 
    { 
    DialogResult result = MessageBox.Show("EXIT?", "Exit Program", MessageBoxButtons.YesNo); 

    if (result != DialogResult.Yes) 
    { 
      e.Cancel = true; 
    } 
    } 
2

Хорошо, я понял. У меня есть:

InitializeComponent();

в двух местах. После удаления одного из них все работает так, как должно.