2016-01-01 3 views
2

Кажется, что мне трудно создавать диалоговое окно и правильно работать, когда пользователь нажимает красную кнопку «X» в правом верхнем углу приложения. Я могу заставить диалоговое окно спросить, действительно ли они хотят закрыть приложение, но независимо от того, что они нажимают, он закроет форму. Код, который у меня есть, следующий:C# Windows Form_Closing Issue

  private void Main_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     DialogResult dr = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.OKCancel); 
     if (dr == DialogResult.Cancel) 
     { 
      e.Cancel = false; 
     } 
    } 

Я также попытался вместо e.Cancel проверить, соответствует ли dr нормальному, но такая же ситуация происходит.

Любые мысли?

+1

'e.Cancel = true;' отменяет действие. – bansi

ответ

3

e.Cancel = true; отменяет действие. и по умолчанию false. вы не устанавливаете его в любом месте. попробуй это.

private void Main_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    DialogResult dr = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.OKCancel); 
    if (dr == DialogResult.Cancel) 
    { 
     e.Cancel = true; 
    } 
} 

Oneliner:

e.Cancel = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.OKCancel) == DialogResult.Cancel; 
+1

ОК, я сделал это, это не dr! = DialogResult.Cancel, но dr == DialogResult. Спасибо за помощь – tserio

+0

ах, я не читал текст вашего диалога. можете исправить это сейчас – bansi

+0

еще один вопрос для вас. У меня есть кнопка в полосе меню, которая также закрывает форму, но проблема в том, что у меня она установлена ​​на один и тот же код. после того, как я нажму ОК, он также запустит код form_closing, так что у меня будет двойное диалоговое окно. Есть предположения? – tserio

0

Вопрос заключается в том, что вы никогда не устанавливая e.Cancel в true. Я хотел бы изменить свое сообщение поле, чтобы показывать Да и нет кнопки, как я чувствую, что делает его более понятным пользователю, и тогда я бы просто установить e.Cancel истинное значение, если пользователь выбирает номер

private void Main_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    DialogResult dr = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.YesNo); 
    e.Cancel = dr == DialogResult.No; 
} 
0

Событие Закрытие происходит как форма закрывается. Когда форма закрыта, все ресурсы, созданные внутри объекта, освобождаются и форма удаляется. Если вы отмените это событие, форма останется открытой. Чтобы отменить закрытие формы, установите для свойства CancelEventArgs свойство CancelEventArgs значение, переданное обработчику события, в значение true.

e.Cancel = true;