gpt4 book ai didi

c# - 在 CloseReason.UserClosing 表单上显示关闭对话框 2 次

转载 作者:行者123 更新时间:2023-11-30 21:01:04 25 4
gpt4 key购买 nike

我想在用户试图关闭应用程序时显示对话框(我的表单上的红色窗口十字和按钮)但是当窗口关闭时,这个对话框阻止关闭,所以我想在窗口关闭时通过应用程序检测下来并在没有对话的情况下继续。这是我的代码

表单加载后我正在捕获关闭事件:

this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
switch (e.CloseReason)
{
case CloseReason.UserClosing:
if (MessageBox.Show("Do you want to exit the application?", "Your App", MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
}
break;
case CloseReason.WindowsShutDown:
e.Cancel = false; //this is propably dumb
break;
default:
break;
}
}

但是当用户关闭应用程序时,对话框会显示 2 次。第一个对话 dotn 做任何事情,在第二个对话之后采取行动。当 Windows 正在关闭时(因为 Windows 正在等待我的应用程序关闭),我如何只显示一次关闭对话框而不显示对话框?

最佳答案

编写此代码的更好方法(我的意见)是不订阅表单事件,而是使用可用的覆盖方法:

protected override void OnFormClosing(FormClosingEventArgs e)
{
switch (e.CloseReason)
{
case CloseReason.UserClosing:
if (MessageBox.Show("Do you want to exit the application?", "Your App", MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
}
break;
case CloseReason.WindowsShutDown:
e.Cancel = false; //this is propably dumb
break;
default:
break;
}

base.OnFormClosing(e);
}

您可能想考虑仅使用 if (e.CloseReason == CloseReason.UserClosing) 而不是基于其当前形式的 switch 语句。 e.Cancel 默认情况下已经是 False,所以你不需要明确地设置它。

关于c# - 在 CloseReason.UserClosing 表单上显示关闭对话框 2 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14484008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com