如何在单击"表单"的"取消"按钮后跳过"验证"

use*_*985 42 c# validating winforms

我用C#.我有一个带有编辑框和取消按钮的Windows窗体.编辑框包含验证事件的代码.每次编辑框失去焦点时都会执行代码.当我点击取消按钮时,我只想关闭表单.我不想要对编辑框进行任何验证.如何实现这一目标?

这是一个重要的细节:如果验证失败,那么

            e.Cancel = true;
Run Code Online (Sandbox Code Playgroud)

防止离开控制.

但是当用户单击"取消"按钮时,无论如何都应该关闭表单.怎么能实现呢?

Dan*_*fer 45

如果在编辑框失去焦点时进行验证,则取消按钮的任何内容都不会阻止该操作发生.

但是,如果失败的验证阻止取消按钮执行其操作,请将CausesValidation按钮的属性设置为false.

参考:Button.CausesValidation财产


Vim*_*Raj 32

显然CausesValidation,按钮的属性必须设置为false,然后验证事件将永远不会发生在其单击上.但是如果按钮的父控件的CausesValidationProperty设置为true ,则可能会失败.大多数时候开发人员错过/忘记更改CausesValidation容器控件的属性(如面板控件).将其设置为False.这应该可以解决问题.

  • Microsoft应该为容器设置默认的"CausesValidation"值为"False",因为它们无论如何都不会自己关注焦点. (6认同)
  • 几个月后又来了:)。后来我自己弄明白了。您不需要为所有父容器一直设置它。只需设置直接父级就足够了。 (2认同)

Ben*_*Ben 22

由于某些控件的验证正在停止,因此我无法将表单关闭.我已经设置了control.CausesValidation = false取消按钮和取消按钮的所有父母.但仍然有问题.

似乎如果用户正在编辑正在使用验证的字段并且刚决定放弃(使该字段输入无效),则取消按钮事件被触发但窗口不会关闭.

这在取消按钮单击事件中由以下修复:

private void btnCancel_Click(object sender, EventArgs e)
{
    // Stop the validation of any controls so the form can close.
    AutoValidate = AutoValidate.Disable;
    Close();
}
Run Code Online (Sandbox Code Playgroud)


wom*_*omp 18

将" CausesValidation取消"按钮的属性设置为false.