2012-05-08 3 views
1

У меня есть приложение с графическим интерфейсом C#. Когда пользователь нажимает на красный «X» (для закрытия приложения), я хочу показать сообщение и спросить, действительно ли он хочет его закрыть.Приложение Закрыть на DialogResult

Я нашел решение:

 DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "SomeTitle", MessageBoxButtons.YesNo); 
     if (dialog == DialogResult.Yes) 
     { 
      Application.Exit(); 
     }else if (dialog == DialogResult.No) 
     { 
      //don't do anything 
     } 

Когда пользователь нажимает «да», то приложение должно прекратить полностью. (Правильно ли используется Application.Exit()?)

Когда пользователь нажимает «нет», DialogResult/MessageBox должен закрываться, но приложение должно оставаться открытым. Однако он закрывается!

Как я могу избежать этого?

BTW: Я использую Visual Studio 2010 и Winforms.

+4

Не делай этого; это очень раздражает. – SLaks

+1

Я всегда надеюсь на «Да, черт возьми!» на таком диалоговом окне, чтобы он никогда больше не спрашивал меня о такой глупости, но еще не видел. Установите для свойства this.DialogResult значение None, чтобы предотвратить его закрытие. –

+0

извините, но это не очень полезно. это требование для реализации этого, поэтому я спрашиваю;) – Nicky

ответ

3

Используйте FormClosing событие из формы, и FormClosingEventArgs отменить процесс.

пример:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     DialogResult dialog = dialog = MessageBox.Show("Do you really want to close the program?", "SomeTitle", MessageBoxButtons.YesNo); 
     if (dialog == DialogResult.No) 
     { 
      e.Cancel = true; 
     } 
    } 
+0

Хорошо, я должен ожидать 3 почти равных ответа :( –

+0

спасибо !!! Что такое «e.Cancel» -> что такое e? – Nicky

+0

e является формой closeingeventargs. E.cancel означает отмену формообразования, поэтому он заново откроется. –

2

Используйте событие формы вашего окна программы FormClosing. После этого вы можете установить e.Cancel в true, если пользователь не нажмет не:

this.FormClosing += (s, e) => { 
    DialogResult dialog = dialog = MessageBox.Show("Really close?", "SomeTitle", 
    MessageBoxButtons.YesNo); 
    if (dialog == DialogResult.No) 
    { 
    e.Cancel = true; 
    } 
}; 

Я думаю, вы используете FormClosed. Ты? Тогда уже слишком поздно.

+0

Хорошая точка. FormClosed вызывается после FormClosing в списке событий. – MrWuf

0

Попробуйте

 this.FormClosing += new FormClosingEventHandler(delegate(object sender, FormClosingEventArgs e) 
     { 
      if (MessageBox.Show("Do you really want to exit this application?", MessageBoxButtons:=MessageBoxButtons.YesNo) == DialogResult.No) 
      { 
       e.Cancel = true; 
      } 
     }); 
0

Обратитесь к ответу Mudu в.

В принципе, если вы не укажете дополнительные параметры для MessageBox.Show(), вы не сможете получить никаких результатов, кроме DialogResult.Ok по умолчанию MessageBox.

Код, который вы опубликовали (минус ваша маленькая опечатка dialog = dialog =), работает точно так, как ожидалось для меня.

также: Application.Exit()IS правильный способ закрытия приложения :)

Смежные вопросы