2012-07-12 38 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