C#中带有“是”、“否”选项的消息框?

3

我想创建一个MessageBox确认框。下面是消息框的内容:

DialogResult dialog = MessageBox.Show("Etes vous sûre de vouloir fermer le programme ?", "Exit",MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes)
{
  Application.Exit();
}
else if (dialog == DialogResult.No)
{
    e.Cancel = true;
}

问题是,当我点击“是”按钮时,弹出框不会自动关闭。我必须再次点击两次才能关闭。应该第一次点击就能关闭。

看起来很简单,但我不确定我的错误在哪里。


5
从那段代码中,没有明显的原因,但具体情况取决于该代码所在的位置。如果放错位置,可能会导致事件被触发超过一次。 - BugFinder
4个回答

7
如果是在主窗体的关闭方法中,您可以像这样使用它: ```` this.Close(); ````
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("Really close?", "Exit", MessageBoxButtons.YesNo) ==
        System.Windows.Forms.DialogResult.No)
        e.Cancel = true;
}

如果用户按下“是”,则由于无关闭取消,您的表单将被关闭。如果不是主要表单关闭并不意味着应用程序退出。在这种情况下,您可以在ShowDialog调用后明确关闭父表单。

4

Below is code to prompt message (Yes/No):

DialogResult dialogResult = MessageBox.Show("Are you sure to delete Yes/No", "Delete", MessageBoxButtons.YesNo);

if (dialogResult == DialogResult.Yes)
{
   /// do something here        
}

1
Application.Exit() 之前调用 Application.DoEvents()。但最好使用 Close() 关闭父窗体,而不是使用 Application.Exit。

0
switch (MessageBox.Show("Etes vous sûre de vouloir fermer le programme ?", "Your_Application_Name", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
        {
            case DialogResult.Yes:
                Application.Exit();
                break;
            case DialogResult.No:
                //Action if No
                break;

        }

请解释NoCancel之间的区别。 - i486
1
为什么这会解决问题?你只是将 if 改成了 switch。除此之外没有其他变化,或者我漏掉了什么吗? - Peter Szekeli
抱歉如果没有回答到你的问题。但这是我使用它的方式,对我有效。 - Ahmed Noozan Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接