2

我有一个 C# GUI 应用程序。当用户单击红色的“X”(用于关闭应用程序)时,我想显示一条消息并询问他是否真的想关闭它。

我找到了一个解决方案:

        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

4 回答 4

5

使用 Form 中的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;
        }
    }
于 2012-05-08T19:14:51.507 回答
2

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

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

我猜你正在使用FormClosed. 你是?那么为时已晚。

于 2012-05-08T19:13:12.177 回答
0

参考木都的回答。

基本上,除非您指定其他参数,否则您MessageBox.Show()无法获得除DialogResult.Ok默认值之外的任何结果MessageBox

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

另外:Application.Exit() 关闭应用程序的正确方法:)

于 2012-05-08T19:21:30.920 回答
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;
            }
        });
于 2012-05-08T19:14:44.277 回答