2011-02-23 128 views
0

我正在创建一个C#窗口应用程序,其中我采取了10个文本框。我想验证每个文本框意味着没有任何文本框应该是空白的。我已经使用errorprovider控件进行验证点击提交按钮。 该代码正常工作,但我想删除错误提供程序通知一旦我插入空白文本框中的值。如何可能请通过任何示例给我的代码。多个文本框的验证

在此先感谢。

回答

0

根据您的实现,在文本框更改事件上,您可以调用您的文本框验证/验证事件处理程序,它将根据您在验证/验证处理程序中实现的任何逻辑设置或清除错误。

0

通常情况下,验证应该发生在焦点离开文本框时 - 您的验证事件是在这里被解雇吗?请参阅this MSDN documentation中的示例部分,了解如何结合使用验证和验证事件来获得此权限。

由于你有很多这样的文本框,我会建议你在里面创建自定义文本框控件封装验证逻辑。

1

正确的做法是为每个TextBox控件处理Validating event。对于您描述的场景,似乎没有任何理由使用ValidatingValidated

因此,维奈所暗示的,最好的事情将是封装这个代码到从继承的自定义控制内置TextBox。覆盖自定义控件的OnValidating method,并将您的验证逻辑置于/清除ErrorProvider。然后将您的表单上的每个文本框控件替换为您的自定义类的实例,而不是内置的实例。

如果你真的验证身份,只要在文本框中输入文本进行更新,你需要处理TextChanged事件并调用你的验证代码来设置/清除ErrorProvider。覆盖您的自定义控件中的OnTextChanged method以执行此操作。

1

这是我使用的代码。你可以看到有2个处理程序,一个用于验证,另一个用于TextChanged事件。 DataTextBox在工具箱中显示为一个图标,因此您可以通过鼠标放置它,并且您还可以在属性窗口中设置canBeEmpty属性,默认值为true。

public class DataTextBox:TextBox 
{ 
    public DataTextBox() 
    { 
     this._errorProvider2 = new System.Windows.Forms.ErrorProvider(); 
     //this.errorProvider1.BlinkRate = 1000; 
     this._errorProvider2.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink; 

     this.TextChanged+=new EventHandler(dtb_TextChanged); 
     this.Validating += new System.ComponentModel.CancelEventHandler(this.dtb_Validating); 


    } 
    private ErrorProvider _errorProvider2; 

    private Boolean _canBeEmpty=true; 
    public Boolean canBeEmpty 
    { 
     get { return (_canBeEmpty); } 
     set { _canBeEmpty = value; } 
    } 

    private void dtb_Validating(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     if ((this.Text.Trim().Length == 0) & !this.canBeEmpty) 
     { 
      _errorProvider2.SetError(this, "This field cannot be empty."); 
      e.Cancel = true; 
     } 
     else 
     { 
      _errorProvider2.SetError(this, ""); 
      e.Cancel = false; 
     } 
    } 

    private void dtb_TextChanged(object sender, EventArgs e) 
    { 
     if (this.Text.Trim().Length != 0) _errorProvider2.SetError(this, ""); 
     else _errorProvider2.SetError(this, "This field cannot be empty."); 
    } 
} 

}