我昨天用自己的验证器制作了一个自定义文本框:
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中的第一次破解。
答案 0 :(得分:0)
看起来这是一个已知问题:Visual Studio Feedback。
我在表单上设置了AutoValidate = AutoValidate.Disable;
,并且不再进行验证。我不确定你的位置符合你的要求。
答案 1 :(得分:0)
我后来发现了一个名为AutoValidate的形式的简单属性。我将它设置为EnableAllowFocusChange,现在我有了我想要的确切行为,当用户离开控件并且验证失败时,errorprovider会发出警告,但用户不受限制。