覆盖Form的OnFormClosing进行验证

Mat*_*ith 5 .net c# winforms

我打算重写OnFormClosing(System.Windows.Forms.Form)来执行对话框用户输入的验证.如果验证失败,那么我将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);
}
Run Code Online (Sandbox Code Playgroud)

我的问题:即使我取消了关闭(也就是说,我应该删除上面的早期返回),我是否应该调用基类'OnFormClosing?

我当前的想法是我不应该调用它,因为当对话框本身确定它没有关闭时,附加到FormClosing事件的委托不会期望被调用.另一方面,我很担心基类'OnFormClosing可能会做其他必要的事情.

仅供参考,我是Winforms的新手,所以对我应该如何进行验证的任何建议(如果这不是最好的方法)表示赞赏.

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

TyC*_*obb 6

看起来很好.这取决于您的应用程序和基本表单的设计,以确定是否适合调用base.OnFormClosing(e)以及何时调用它(在开头或结尾),即如果您有自定义代码基本方法.

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

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