0

在我的 winforms 项目中,对于一个特定的表单,我有近 10 个用于名字、姓氏、年龄、职业等的控件(包括文本框、下拉列表)和一个保存按钮

我已经为这些控件创建了表示数据源的类,并在同一个类中实现了验证方法,该类对每个属性进行验证并抛出验证消息。

当我想将焦点设置在在 UI 中引发验证错误的控件上时,就会出现问题。

我如何实现这一点。将控件传回课堂是不好的做法。

我是否需要更改在类级别实现验证的方式?

有什么建议/链接吗?

4

1 回答 1

1

我建议您使用 .NET 提供的实际验证技术:

Validating Validated

我还强烈建议添加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
            }
        }
    }
}
于 2012-07-12T14:29:42.320 回答