在我的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