在我的WinForms項目,對於一個特定的形式,我有近10控制名字,姓氏,年齡,職業等。(包括文本框,下拉列表)之後和保存按鈕將焦點設置控制驗證錯誤
我創建了表示這些控件的數據源的類,並在同一個類中實現了驗證方法,該方法對每個屬性進行驗證並引發驗證消息。
當我想要將焦點設置在引發UI中的驗證錯誤的控件上時,問題就會引發。
如何實現this.Passing控制回到課堂是不好的做法。
我需要改變我在課堂上實施驗證的方式嗎?
任何建議/鏈接?
在我的WinForms項目,對於一個特定的形式,我有近10控制名字,姓氏,年齡,職業等。(包括文本框,下拉列表)之後和保存按鈕將焦點設置控制驗證錯誤
我創建了表示這些控件的數據源的類,並在同一個類中實現了驗證方法,該方法對每個屬性進行驗證並引發驗證消息。
當我想要將焦點設置在引發UI中的驗證錯誤的控件上時,問題就會引發。
如何實現this.Passing控制回到課堂是不好的做法。
我需要改變我在課堂上實施驗證的方式嗎?
任何建議/鏈接?
我建議你使用.NET提供實際的驗證技術:
我也強烈建議增加一個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
}
}
}
}
我試着實現你所提到的代碼..問題是,例如讓我說我想驗證控制姓名文本框,上面的代碼只適用於焦點到lastname文本框(GotFocus)和focuslost它驗證它是否爲空/空..我正在尋找一個焦點不去那個控制和用戶點擊保存按鈕..它應顯示驗證消息並將焦點設置在該控件上 – Soni 2012-07-12 16:09:13
注:通過控制也不錯。控件就像其他對象一樣是一個對象。你不是「形式」編程。你只是編程,而你的對象恰好具有屏幕顯示。什麼*是*不好的做法是將對象與不適合的東西搞亂 – Crisfole 2012-07-12 14:39:51