2012-05-08 59 views
1

我有一个C#GUI应用程序。当用户点击红色'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应该关闭,但应用程序应该保持打开状态。但是,它关闭了!

我该如何避免这种情况?

顺便说一句:我使用Visual Studio 2010和Winforms。

+4

不这样做的正确方法;这真的很烦人。 – SLaks

+1

我总是希望有一个“是的,该死的!”这样的对话框上的按钮,所以它不会再问我这样一个愚蠢的事情,但还没有看到过。将this.DialogResult属性设回无,以防止它关闭。 –

+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是formcloseingeventargs。e.cancel意味着取消formclosing,因此它会打开。 –

2

使用窗体的FormClosing事件程序窗口。然后您可以设置e.Canceltrue如果用户点击没有

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

参考木渎的答案。

基本上除非你指定MessageBox.Show()的附加参数,否则DialogResult.Ok的默认值为MessageBox

您发布的代码(减去您的小错字dialog = dialog =)完全符合我的预期。

另外:Application.Exit()IS关闭应用程序:)