2012-09-20 88 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

剛剛更新了代碼。請記住,如果這對你有用,請立即投入並接受。謝謝。 –