我在文本框中验证userinput有一个小问题.
有一个带有各种文本框的用户控件,用户可以在其中输入数据以将新记录添加到数据库.当这些文本框中的任何一个没有正确的值(null或特定)时,我希望取消插入并让'errormaking'文本框获得焦点.
必须通过按钮检查.我可以调用按钮的Validating事件,还是有不同的(更好的)方法来实现这个?
此外,还有一个取消按钮取消整个插入.当尝试使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
创建单个实例ErrorProvider并将其放在表单上.在验证每个单独的控件时不要创建错误提供程序.然后订阅文本框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);
}
Run Code Online (Sandbox Code Playgroud)
单击"取消"按钮时,为了避免验证,请将其CauseValidation属性设置为false.
更新:因此,您正在验证用户控件中的控件,您应该在单击取消按钮时禁用该验证:
private void CancelButton_Click(object sender, EventArgs e)
{
userControl.AutoValidate = AutoValidate.Disable;
Close();
}
Run Code Online (Sandbox Code Playgroud)