gpt4 book ai didi

c# - 覆盖 Form 的 OnFormClosing 以进行验证

转载 作者:太空狗 更新时间:2023-10-29 22:55:07 25 4
gpt4 key购买 nike

我计划覆盖(System.Windows.Forms.Form 的)OnFormClosing 以验证用户对我的对话框的输入。如果验证失败,那么我会将 FormClosingEventArgs 的 Cancel 属性设置为 true:

protected override void OnFormClosing(FormClosingEventArgs e)
{
if (DialogResult == DialogResult.OK)
{
if (!IsDialogInputValid())
{
e.Cancel = true;
return; // Is not calling the base class OnFormClosing okay here?
}
}
base.OnFormClosing(e);
}

我的问题:即使取消关闭,我是否也应该调用基类的 OnFormClosing(即,我是否应该删除上面的提前返回)?

我目前的想法是我不应该调用它,因为附加到 FormClosing 事件的委托(delegate)不会期望在对话框本身决定不关闭时被调用。另一方面,我担心基类的 OnFormClosing 可能会做其他必要的事情。

仅供引用,我是 Winforms 的新手,所以对于我应该如何执行验证的任何建议(如果这不是最佳方法)表示赞赏。

相关链接: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.onformclosing.aspx

最佳答案

看起来不错。这真的取决于您的应用程序的设计和您的基本表单来确定是否适合调用 base.OnFormClosing(e) 以及何时调用它(在开始或结束时),即如果您在基本方法。

看看这个例子,是否有理由覆盖 OnFormClosing?你不能/不应该在 DialogResult 设置为 OK 的地方进行验证吗?如果输入无效,则不应将对话框设置为 OK 并且不应调用 Close()。通常 OnFormClosing 用于处理任何清理并提示用户询问他们是否真的要取消他们当前的任务(通常在他们点击表单上的 X 时使用)。

回到手头的问题之一,如果输入无效,您可以安全地调用return。如果您不打算实际关闭,则没有理由调用 base.OnFormClosing()。您是否要调用 base.OnFormClosing() 取决于您在基本方法中的逻辑。

关于c# - 覆盖 Form 的 OnFormClosing 以进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035317/

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