2012-09-20 47 views
1

目前我正在使用如下类来检查表单上的TextBoxes是否注册到它,它们都具有非空白文本并且工作正常,但现在我还想为此验证添加一个ComboBox,以便在没有任何注册文本框和窗体上的Combobxes为空时进行验证。 所以如果我想为这个类添加一个Combobx,它应该是什么样子?什么是最好的做法呢?基于组合框和文本框的表单验证

public class InputValidator 
{ 
    public delegate void ValidationDoneDelegate(bool enable); 

    public event ValidationDoneDelegate ValidationDone; 

    public void RegisterTextBox(TextBox tb) 
    { 
     tb.TextChanged += (s, e) => this.Validate(s); 
    } 

    private void Validate(object sender) 
    { 
     var t = sender as TextBox; 

     if (t == null) 
     { 
      return; 
     } 

     var validationDone = ValidationDone; 

     if (validationDone != null) 
     { 
      validationDone(!string.IsNullOrEmpty(t.Text)); 
     } 
    } 
} 

回答

1

我有两个列表设置,其中将容纳所有TextBoxComboBox引用。当需要验证时,我们将检查所有已注册的控件,如果其中任何一个都为空,我们将无效。我想你也可以看到如何轻松扩展以支持其他控件类型。

public class InputValidator 
{ 
    public delegate void ValidationDoneDelegate(bool enable); 

    public event ValidationDoneDelegate ValidationDone; 

    private List<TextBox> textBoxes = new List<TextBox>(); 
    private List<ComboBox> comboBoxes = new List<ComboBox>(); 

    public void RegisterTextBox(TextBox tb) 
    { 
     tb.TextChanged += (s, e) => this.Validate(); 
     textBoxes.Add(tb); 
    } 

    public void RegisterComboBox(ComboBox cb) 
    { 
     cb.SelectedValueChanged += (s, e) => this.Validate(); 
     comboBoxes.Add(cb); 
    } 

    private void Validate() 
    { 
     bool isValid = true; 

     foreach (var tb in textBoxes) 
     { 
      if (string.IsNullOrEmpty(tb.Text)) 
       isValid = false; 
     } 

     if (isValid) 
     { 
      foreach (var cb in comboBoxes) 
      { 
       if (cb.SelectedItem == null) 
        isValid = false; 
      } 
     } 

     var validationDone = ValidationDone; 

     if (validationDone != null) 
     { 
      validationDone(isValid); 
     } 
    } 
} 

现在,我不知道你认为什么是对ComboBox无效的输入。所以你可能需要调整这条线以满足你的需求:isValid = cb.SelectedItem != null;。我已经声称,只要选择了某些选择是有效的。

编辑:我忘了最后一行切换到validationDone(isValid);

+0

NOP,我希望两个COMBOX是非空白和TextBox ..所以基本上必须在combobxo选择的东西,也是文本框不应该是空的... – Bohn

+1

陷阱。给我一个编辑的机会。 –

+1

刚刚更新了代码。请记住,如果这对你有用,请立即投入并接受。谢谢。 –