2009-08-23 2 views
0

여러 텍스트 상자가있는 C# 폼이 있습니다. 계속하기 전에 각 입력란의 입력 내용을 확인해야합니다. 각 텍스트 상자에 대한 유효성 검사 규칙이 동일하면 모든 필드에 동일한 규칙을 한 번에 적용 할 수있는 방법이 있습니까? 그리고 내 원하는 출력은 동일합니다. 내가 그의 추구입니다 .. 나는이 작업을 수행하는 몇 가지 표준 및 쉬운 방법이 있어야한다여러 텍스트 상자에서 C# 데이터의 유효성을 검사합니까?

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

처럼 아무것도 사용하지 않는다는 의미는 (I 분홍색으로 관련 텍스트 상자의 backcolour을 변경하려면) way;)

답변

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

디자인 타임 중에 유효성 검사를 위해 정규식 문자열을 허용하는 사용자 지정 컨트롤을 작성합니다. 실행시 하나의 공통 핸들러로 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); 

     } 
    }