我希望在用户关闭 winforms 应用程序中的表单窗口时提示用户保存数据。如果他们单击表单右上角的红色框,我无法弄清楚如何向用户触发提示。
我的应用程序当前有一个布尔标志,在 textchanged 事件上设置为 True。所以我只需要检查红色框触发的任何事件中的布尔值。
有什么建议吗?
我希望在用户关闭 winforms 应用程序中的表单窗口时提示用户保存数据。如果他们单击表单右上角的红色框,我无法弄清楚如何向用户触发提示。
我的应用程序当前有一个布尔标志,在 textchanged 事件上设置为 True。所以我只需要检查红色框触发的任何事件中的布尔值。
有什么建议吗?
您需要处理FormClosing
事件。此事件在表单即将关闭之前引发,无论是因为用户单击了标题栏中的“X”按钮还是通过任何其他方式。
因为该事件是在表单关闭之前引发的,所以它为您提供了取消关闭事件的机会。您FormClosingEventArgs
在参数中传递了一个类的实例e
。通过将该e.Cancel
属性设置为 True,您可以取消挂起的关闭事件。
例如:
Private Sub Form_Closing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
If Not isDataSaved Then
' The user has unsaved data, so prompt to save
Dim retVal As DialogResult
retVal = MessageBox.Show("Save Changes?", YesNoCancel)
If retVal = DialogResult.Yes Then
' They chose to save, so save the changes
' ...
ElseIf retVal = DialogResult.Cancel Then
' They chose to cancel, so cancel the form closing
e.Cancel = True
End If
' (Otherwise, we just fall through and let the form continue closing)
End If
End Sub
如果您覆盖表单的OnFormClosing方法,您就有机会通知用户已进行更改,并有机会取消关闭表单。
该事件为您提供了一个FormClosingEventArgs实例,该实例具有CloseReason属性(告诉您表单关闭的原因)以及 Cancel 属性,您可以将其设置为 True 以阻止表单关闭。
我为 C# 实现了这段代码,希望对你有用
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (PreClosingConfirmation() == System.Windows.Forms.DialogResult.Yes)
{
Dispose(true);
Application.Exit();
}
else
{
e.Cancel = true;
}
}
private DialogResult PreClosingConfirmation()
{
DialogResult res = System.Windows.Forms.MessageBox.Show(" Do you want to quit? ", "Quit...", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
return res;
}
您需要FormClosing事件