我在文本框中验证用户输入时遇到一个小问题。
有一个带有各种文本框的用户控件,用户可以在其中输入数据以向数据库添加新记录。当这些文本框中的任何一个没有正确的值(null或特定)时,我希望取消插入并让'errormaking'文本框获得焦点。
必须通过按钮检查。我可以调用按钮的验证事件,还是有不同的(更好的)方法来实现这个?
此外,还有取消按钮取消整个插入。当尝试使用errorprovider时,“取消”按钮也变得不可用,因为该字段为空,因此无法发送。
一些参考代码:
private void CheckInput(CancelEventArgs e, TextBox tb)
{
ErrorProvider error = new ErrorProvider();
if (string.IsNullOrEmpty(tb.Text))
{
error.SetError(tb, "*");
e.Cancel = true;
}
if (!string.IsNullOrEmpty(tb.Text))
{
error.SetError(tb, string.Empty);
error.Clear();
error.Dispose();
}
}
答案 0 :(得分:5)
创建ErrorProvider
的单个实例并将其放在表单上。在验证每个单独的控件时不要创建错误提供程序。然后订阅textbox Validating
事件(您可以对所有文本框使用相同的处理程序):
private void textBox_Validating(object sender, CancelEventArgs e)
{
TextBox tb = (TextBox)sender;
if (String.IsNullOrEmpty(tb.Text))
{
errorProvider.SetError(tb, "*");
e.Cancel = true;
return;
}
errorProvider.SetError(tb, String.Empty);
}
为了避免在点击“取消”按钮时进行验证,请将其CauseValidation
属性设置为false
。
更新:因此,您正在验证用户控件中的控件,您应该在单击取消时禁用该验证:
private void CancelButton_Click(object sender, EventArgs e)
{
userControl.AutoValidate = AutoValidate.Disable;
Close();
}