2014-01-14 31 views
2

我在验证文本框中的userinput时遇到了一个小问题。在按钮上单击winforms验证输入c#

有一个用户控件,带有各种文本框,用户可以在其中输入数据以将新记录添加到数据库。当这些文本框中的任何一个没有正确的值(空或特定)时,我希望插入被取消并使'错误生成'文本框获得焦点。

这必须通过一个按钮进行检查。我可以调用按钮的验证事件,还是有不同的(更好的)方法来实现这一点?

此外,还有一个取消按钮来取消整个插入。当试图使用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(); 
     } 
    } 

回答

5

创建的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); 
} 

为了避免验证,当你点击取消按钮,设置它的CauseValidation属性false

更新:因此,你在用户控件验证控件,您应禁用当你点击取消buttong该验证:

private void CancelButton_Click(object sender, EventArgs e) 
{ 
    userControl.AutoValidate = AutoValidate.Disable; 
    Close(); 
} 
+0

这仍然没有解决我的使用户的问题,点击取消按钮,如果文本框留空。我如何解决这个问题? – Matthijs

+0

@MatthijsL对不起,错过了那部分。查看更新 –

+0

我其实已经试过了。表单仍然不会关闭(取消按钮表单关闭)。这与输入是在Usercontrol内完成的事实有关,但按钮不在它之内? – Matthijs