关于winforms:是什么导致我的文本框验证?

What is causing validation on my textbox?

我昨天用自己的验证器制作了一个自定义文本框:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public partial class CustomTextBox : TextBox
{
    ErrorProvider errorProvider;

    public CustomTextBox()
    {            
        InitializeComponent();
        errorProvider = new ErrorProvider();
        errorProvider.DataSource = this;
    }        


    protected override void OnValidating(CancelEventArgs e)
    {
        base.OnValidating(e);
        if (this.Text.Trim() =="")
        {
            errorProvider.SetError(this,"Required field");
            e.Cancel = true;
            return;
        }
        errorProvider.SetError(this,"");
    }


}

所以我把它放在一个带有取消按钮的表单上,并在取消按钮上将 CauseValidation 设置为 false。我还将表单上的 CauseValidation 设置为 false。出于某种原因,如果我单击取消,我的 customtextbox 仍在触发 onValidating 事件。任何想法是什么原因造成的?我不希望有任何东西验证我的文本框,直到我单击一个提交按钮,该按钮将尝试验证表单上的所有控件。这样一来,用户在移动到另一个控件之前就不会被迫将数据输入到控件中。听起来合理吗?这是我第一次破解 winforms UI。


后来我发现了表单的一个简单属性,称为 AutoValidate。我将它设置为 EnableAllowFocusChange,现在我有了我想要的确切行为,当用户离开控件并且验证失败时,errorprovider 会发出警告,但用户不限于控件。


看起来这是一个已知问题:Visual Studio 反馈。

我在表单上设置了 AutoValidate = AutoValidate.Disable;,它不再被验证。不过,我不确定您会在哪里满足您的要求。