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 反馈。
我在表单上设置了