2010-08-26 101 views
4

驗證winforms中的字段是否有一個快捷方式?例如,在保存記錄之前需要填寫特定的文本框。我經常做的是在保存之前先編程檢查所有必填字段。例如:Winforms中的字段驗證

protected bool CheckFields() 
{ 
    bool isOk = false; 
    if(textBox1.Text != String.Empty) 
     { 
      isOk = true; 
     } 
    return isOk; 
} 

private void btnSave_Click(object sender, EventArgs e) 
{ 
    if(CheckFields()) 
     { 
      Save();// Some function to save record. 
     } 
} 

在WinForms中,ASP.Net中有Validator的計數器部分嗎?或任何其他方式...

回答

5

這裏有一個辦法:

private List<Control> m_lstControlsToValidate; 
    private void SetupControlsToValidate() 
    { 
     m_lstControlsToValidate = new List<Control>(); 

     //Add data entry controls to be validated 

     m_lstControlsToValidate.Add(sometextbox); 
     m_lstControlsToValidate.Add(sometextbox2); 

    } 
    private void ValidateSomeTextBox() 
    { 
     //Call this method in validating event. 
     //Validate and set error using error provider 
    } 

    Private void Save() 
    { 
     foreach(Control thisControl in m_lstControlsToValidate) 
     { 
      if(!string.IsNullOrEmpty(ErrorProvider.GetError(thisControl))) 
      {      
       //Do not save, show messagebox. 
       return; 
      } 
     } 
    //Continue save 
    } 

編輯:

對於m_lstControlsToValidate你需要編寫將在驗證事件被解僱的驗證方法各控制。

ErrorProvider.GetError(thisControl)將返回一些errortext或emptystring。空字符串意味着控制很好。否則,控件包含一些錯誤,我們會中止保存操作。

我們對m_lstControlsToValidate中的所有控件執行此操作。如果所有控件都沒有錯誤,我們繼續保存其他中止。

+0

如果 {// 不要保存,展示消息框。 return; } 我不明白代碼..你能解釋一下嗎.. – yonan2236 2010-08-26 08:58:27

+0

我已經在編輯下解釋過了。 – 2010-08-26 09:11:17

+0

謝謝先生..... :) – yonan2236 2010-08-26 10:05:40

0

不是真的,在Win Form中,您應該使用Control.Validating Event進行驗證,當用戶在窗體上工作時。但是爲了保存驗證您已經編寫了代碼來檢查用戶是否正確插入了所有數據。例如,你可以創建一個強制性的TextBox,並遍歷所有尋找這種類型的控件的表單控件,並檢查用戶是否輸入了一些文本。

0

使用驗證控件。他們是最好的使用。

此外,

protected bool CheckFields() 
{ 
    bool isOk = false; 
    if(textBox1.Text != String.Empty) 
     { 
      isOk = true; 
     } 
    return isOk; 
} 

可以大大shorterned於:(!string.IsNullOrEmpty(ErrorProvider.GetError(thisControl)))

protected bool CheckFields() 
{ 
    return textBox1.Text != String.Empty; 
}