Winforms Application.Exit 关闭 x 应用程序或单击带有确认消息的退出按钮
Winforms Application.Exit on Closing x app or clicking a Exit Button with a confirmation message
我正在使用 Telerik WinForm (2019.2.618.40) 控件开发 WinForms (.NET 4.7.2) 应用程序。
单击 window 顶部的关闭框 [x] 图标,我想请求用户确认,如果是,则关闭应用
以下代码运行良好,它关闭了 window,但它 不是 关闭过程(我仍然可以在 任务管理器中看到该应用程序).
我想我需要调用 Application.Exit();
来终止应用进程。但是当我调用 Closing Event 被触发两次并且我得到确认 window 两次并得到以下错误
System.InvalidOperationException: 'Collection was modified;
enumeration operation may not execute.'
如何更正我的关闭事件,以便我可以请求用户确认并关闭 windows 以及从任务管理器中彻底退出应用程序?
我的基础表格
public class BaseForm : Telerik.WinControls.UI.RadForm
{
public BaseForm()
{
this.FormClosing += new FormClosingEventHandler(Form_Closing);
}
public void Form_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
RadMessageBox.SetThemeName("Material");
DialogResult dialogResult = RadMessageBox.Show(
this,
"Are you sure, you want to exit out of the application? Any unsaved data will be lost!",
"Application Name",
MessageBoxButtons.YesNo,
RadMessageIcon.Question,
MessageBoxDefaultButton.Button2,
RightToLeft.No);
if (dialogResult == DialogResult.Yes)
{
e.Cancel = false;
//Application.Exit();
}
else if (dialogResult == DialogResult.No)
{
e.Cancel = true;
}
base.OnClosing(e);
}
//....
//....
//....
}
更新
而不是 FormClosign 事件,如果我使用 FormClosed 事件,Application.Exit()
工作正常,但如果我点击确认消息不,它仍在关闭应用程序。
this.FormClosed += new FormClosedEventHandler(App_kill);
App Kill 方法(无法处理 DialogResult.No 响应)
private void App_kill(object sender, FormClosedEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
RadMessageBox.SetThemeName("Material");
DialogResult dialogResult = RadMessageBox.Show(
this,
"Are you sure, you want to exit out of the application? Any unsaved data will be lost!",
"Close Application",
MessageBoxButtons.YesNo,
RadMessageIcon.Question,
MessageBoxDefaultButton.Button2,
RightToLeft.No);
if (dialogResult == DialogResult.Yes)
{
Application.Exit();
}
if (dialogResult == DialogResult.No)
{
//e.Cancel = true;
}
}
}
我正在使用 Telerik WinForm (2019.2.618.40) 控件开发 WinForms (.NET 4.7.2) 应用程序。
单击 window 顶部的关闭框 [x] 图标,我想请求用户确认,如果是,则关闭应用
以下代码运行良好,它关闭了 window,但它 不是 关闭过程(我仍然可以在 任务管理器中看到该应用程序).
我想我需要调用 Application.Exit();
来终止应用进程。但是当我调用 Closing Event 被触发两次并且我得到确认 window 两次并得到以下错误
System.InvalidOperationException: 'Collection was modified; enumeration operation may not execute.'
如何更正我的关闭事件,以便我可以请求用户确认并关闭 windows 以及从任务管理器中彻底退出应用程序?
我的基础表格
public class BaseForm : Telerik.WinControls.UI.RadForm
{
public BaseForm()
{
this.FormClosing += new FormClosingEventHandler(Form_Closing);
}
public void Form_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
RadMessageBox.SetThemeName("Material");
DialogResult dialogResult = RadMessageBox.Show(
this,
"Are you sure, you want to exit out of the application? Any unsaved data will be lost!",
"Application Name",
MessageBoxButtons.YesNo,
RadMessageIcon.Question,
MessageBoxDefaultButton.Button2,
RightToLeft.No);
if (dialogResult == DialogResult.Yes)
{
e.Cancel = false;
//Application.Exit();
}
else if (dialogResult == DialogResult.No)
{
e.Cancel = true;
}
base.OnClosing(e);
}
//....
//....
//....
}
更新
而不是 FormClosign 事件,如果我使用 FormClosed 事件,Application.Exit()
工作正常,但如果我点击确认消息不,它仍在关闭应用程序。
this.FormClosed += new FormClosedEventHandler(App_kill);
App Kill 方法(无法处理 DialogResult.No 响应)
private void App_kill(object sender, FormClosedEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
RadMessageBox.SetThemeName("Material");
DialogResult dialogResult = RadMessageBox.Show(
this,
"Are you sure, you want to exit out of the application? Any unsaved data will be lost!",
"Close Application",
MessageBoxButtons.YesNo,
RadMessageIcon.Question,
MessageBoxDefaultButton.Button2,
RightToLeft.No);
if (dialogResult == DialogResult.Yes)
{
Application.Exit();
}
if (dialogResult == DialogResult.No)
{
//e.Cancel = true;
}
}
}