2009-08-23 9 views
0

私は複数のテキストボックスを持つC#フォームを持っています。先に進む前に、各テキストボックスの入力を検証する必要があります。各テキストボックスの検証規則が同じ場合、すべてのフィールドに対して同じルールを一度に適用する方法はありますか?そして私の望む出力は同じです。私はそのことを求めている..私は、私はいくつかの標準およびこれを実行する簡単な方法があるはず複数のテキストボックスでデータを検証するC#

validate_txtName(); 
validate_txtAddress(); 
validate_txtCity(); 

のようなものを使用したくない意味(私はピンクに関連するテキストボックスのbackcolourを変更したいです) );

答えて

1

まず、すべてのテキストボックスをリストに入れます。次に、ForEach関数をリストに適用し、検証規則を表すラムダ式を引数として渡します。

編集:私は自分のコードでこの例を見つけた は:

Core.Model.Settings.Labels.ToList() 
.ForEach(x => schedulerStorage1.Appointments.Labels.Add(Color.FromArgb(x.ARGB), x.LabelName)); 
+0

アンリさん、もっと良い例を書くために余分な時間を取っていただけますか? – HipsterZipster

+0

どうしたの? – Henri

1

多分foreachループ? :)

+0

foreachを使用するには、すべてのテキストボックスをいくつかのデータ構造に配置する必要がありますか? –

0

あなたは..あなたがハタコントロールに検証し、すべての検証呼び出したいすべてのコントロールを置き、私が思うにこれを試すことができますforeachループを使用してグルーパ内のコントロール

1

デザイン時に検証チェックのための正規表現文字列を受け付ける独自のコントロールを作成します。実行時に、1つの共通ハンドラでValidatingイベントを処理します。次のコードはこれを行います。 errorproviderを削除し、バックカラーロジックを使用することができます。

public class ValidatedTextBox : TextBox 
    { 
     private IContainer components; 
     private Color m_OldBackColor;   

     [Description("Color to be set when validation fails.")] 
     public Color BackColorOnFailedValidation 
     { 
      get 
      { 
       return m_BackColorOnFailedValidation; 
      } 

      set 
      { 
       m_BackColorOnFailedValidation = value; 
      } 
     } 
     private Color m_BackColorOnFailedValidation = Color.Yellow; 

     [Description("Message displayed by the error provider.")] 
     public string ErrorMessage 
     { 
      get 
      { 
       return m_ErrorMessage; 
      } 

      set 
      { 
       m_ErrorMessage = value; 
      } 
     } 
     private string m_ErrorMessage = ""; 


     [Description("Regular expression string to validate the text.")] 
     public string RegularExpressionString 
     { 
      get 
      { 
       return m_RegularExpressionString; 
      } 
      set 
      {    
       m_RegularExpressionString = value; 
      } 
     } 
     private string m_RegularExpressionString = ""; 
     private ErrorProvider errorProvider1; 

     [Browsable(false)] 
     public bool Valid 
     { 
      get 
      { 
       return m_Valid; 
      } 
     } 
     private bool m_Valid = true; 

     public ValidatedTextBox() 
      : base() 
     { 
      InitializeComponent(); 
      m_OldBackColor = this.BackColor; 
      this.Validating += new System.ComponentModel.CancelEventHandler(ValidatedTextBox_Validating); 
      errorProvider1.Clear(); 
     } 

     void ValidatedTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) 
     { 
      if (RegularExpressionString != string.Empty) 
      { 
       Regex regex = new Regex(RegularExpressionString); 
       m_Valid = regex.IsMatch(Text); 
       SetBackColor(); 
       if (!Valid) 
       { 
        errorProvider1.SetError(this, this.ErrorMessage); 
        this.Focus(); 
       } 
       else 
       { 
        errorProvider1.Clear(); 
       } 
      } 
     } 

     private void SetBackColor() 
     { 
      if (!Valid) 
       BackColor = BackColorOnFailedValidation; 
      else 
       BackColor = m_OldBackColor; 
     } 

     private void InitializeComponent() 
     { 
      this.components = new System.ComponentModel.Container(); 
      this.errorProvider1 = new System.Windows.Forms.ErrorProvider(this.components); 
      ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).BeginInit(); 
      this.SuspendLayout(); 
      ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).EndInit(); 
      this.ResumeLayout(false); 

     } 
    } 
関連する問題