2012-07-12 61 views
0

在我的WinForms項目,對於一個特定的形式,我有近10控制名字,姓氏,年齡,職業等。(包括文本框,下拉列表)之後和保存按鈕將焦點設置控制驗證錯誤

我創建了表示這些控件的數據源的類,並在同一個類中實現了驗證方法,該方法對每個屬性進行驗證並引發驗證消息。

當我想要將焦點設置在引發UI中的驗證錯誤的控件上時,問題就會引發。

如何實現this.Passing控制回到課堂是不好的做法。

我需要改變我在課堂上實施驗證的方式嗎?

任何建議/鏈接?

+0

注:通過控制也不錯。控件就像其他對象一樣是一個對象。你不是「形式」編程。你只是編程,而你的對象恰好具有屏幕顯示。什麼*是*不好的做法是將對象與不適合的東西搞亂 – Crisfole 2012-07-12 14:39:51

回答

1

我建議你使用.NET提供實際的驗證技術:

ValidatingValidated

我也強烈建議增加一個ErrorProvider並用它來說明是什麼錯誤。沒有這樣的例子,但谷歌充滿了很好的例子。

您可以保留您的驗證類,並將每個控件簡單地訂閱到類上的方法。

例如(原諒K個& R,它更容易寫S.O.,也這可能需要一些調整,我從內存中寫入):

public MyForm : Form { 

    Validator validator; 

    public MyForm() { 
     validator = new Validator(/*Arguments here*/); 
    } 

    public override void OnLoad(EventArgs e) { 
     base.OnLoad(e); 

     targetControl.Validating += (o,e) => { 
      try { 
       validator.Validate(e); 
      } 
      catch(YourException exc) { 
       e.Cancel = true; //References the validating event args 
       //Whatever else you want to do 
      } 
     } 
    } 
} 
+0

我試着實現你所提到的代碼..問題是,例如讓我說我想驗證控制姓名文本框,上面的代碼只適用於焦點到lastname文本框(GotFocus)和focuslost它驗證它是否爲空/空..我正在尋找一個焦點不去那個控制和用戶點擊保存按鈕..它應顯示驗證消息並將焦點設置在該控件上 – Soni 2012-07-12 16:09:13