在我的 winforms 项目中,对于一个特定的表单,我有近 10 个用于名字、姓氏、年龄、职业等的控件(包括文本框、下拉列表)和一个保存按钮
我已经为这些控件创建了表示数据源的类,并在同一个类中实现了验证方法,该类对每个属性进行验证并抛出验证消息。
当我想将焦点设置在在 UI 中引发验证错误的控件上时,就会出现问题。
我如何实现这一点。将控件传回课堂是不好的做法。
我是否需要更改在类级别实现验证的方式?
有什么建议/链接吗?
在我的 winforms 项目中,对于一个特定的表单,我有近 10 个用于名字、姓氏、年龄、职业等的控件(包括文本框、下拉列表)和一个保存按钮
我已经为这些控件创建了表示数据源的类,并在同一个类中实现了验证方法,该类对每个属性进行验证并抛出验证消息。
当我想将焦点设置在在 UI 中引发验证错误的控件上时,就会出现问题。
我如何实现这一点。将控件传回课堂是不好的做法。
我是否需要更改在类级别实现验证的方式?
有什么建议/链接吗?
我建议您使用 .NET 提供的实际验证技术:
我还强烈建议添加ErrorProvider
并使用它来指示错误是什么。没有给出这方面的例子,但谷歌有很多很好的例子。
您可以保留您的验证类,并简单地将每个控件订阅到类上的方法。
例如(原谅 K&R,在 SO 上写更容易,这也可能需要一些调整,我是从内存中写的):
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
}
}
}
}