C# 当DialogResult为否时阻止窗体关闭

C# 当DialogResult为否时阻止窗体关闭,c#,windows,winforms,forms,dialog,C#,Windows,Winforms,Forms,Dialog,我在Windows窗体应用程序窗体的关闭事件中使用以下代码: private void Main_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr = MessageBox.Show("Are you sure you want to quit?", "Leaving App",MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dr

我在Windows窗体应用程序窗体的关闭事件中使用以下代码:

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dr = MessageBox.Show("Are you sure you want to quit?", "Leaving App",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (dr == DialogResult.No)
    {
        return;
    }
    else
    Application.Exit();
}
但问题是,每当用户单击“是”时,应用程序结束,但当用户单击“否”时,应用程序仍在运行,但表单隐藏。当用户单击“否”时,如何保持窗体可见

更新


我面临的另一个问题是,当我单击Yes时,MessageBox再次显示,然后单击Yes,应用程序退出。为什么它会显示两次?

您不必调用
Application.Exit()
,因为如果您不取消关闭它,程序将自动退出。下面是正在工作的更正代码:

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult dr = MessageBox.Show("Are you sure you want to quit?", "Leaving App",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (dr == DialogResult.No)
    {
        e.Cancel = true;
    }
}

您需要使用
e.cancel=true取消退出
在您的活动中
Main\u FormClosing
停止关闭

我知道这不是正确的方法,但它会根据您的需要产生

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   if(MessageBox.Show("Are you sure you want to quit?", "Leaving App", MessageBoxButtons.YesNo).ToString()=="No")
        e.Cancel = true;
}

因为ToString()方法将在与消息框一起使用时提供对话框的结果。

我是Akhilavishnu,如需更多帮助,请发邮件给我akhilavishnu2@gmail.com. 请将这些代码行放在您的应用程序中,这样可以很好地进行编码

private void    Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if(MessageBox.Show("Are you sure that you want to exit", 
                        MessageBoxButtons.YesNo, 
                        MessageBoxIcon.question) == DialogResult.No)
    {
        e.Cancel=true;
    }
}

//in formclose event
private void Form1_FormClosed(object sender,FormClosedEventArgs e)
{
    Application.Exit();
}

如果您只需将以下代码放入退出按钮的单击事件中,它就可以正常工作:)


我记不清了,但我认为它是
e.Cancel=true
,而您在它上面删除了
应用程序。退出
对于您的第二个问题,在formclosing中放置一个断点,并查看堆栈跟踪以查看调用formclosing的内容感谢您的回答@Sayse,我找到了解决第二个问题的另一种方法。:)谢谢,成功了。但我面临的另一个问题是,当我单击Yes时,MessageBox再次显示,然后单击Yes,应用程序退出。为什么显示两次?有关闭按钮吗?也许你也在问,这就是为什么它会提示两次。谢谢@gzaxx,但我找到了另一种适合我的应用程序工作流程的方法。:)
private void    Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if(MessageBox.Show("Are you sure that you want to exit", 
                        MessageBoxButtons.YesNo, 
                        MessageBoxIcon.question) == DialogResult.No)
    {
        e.Cancel=true;
    }
}

//in formclose event
private void Form1_FormClosed(object sender,FormClosedEventArgs e)
{
    Application.Exit();
}
DialogResult quit = MessageBox.Show("Are you sure you want to quit?", "Quit", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
if (quit == DialogResult.Yes) this.Close();