0

私のwinformsプロジェクトでは、特定のフォームに対して、名、姓、年齢、職業など(テキストボックス、ドロップダウンリストを含む)の10個近くのコントロールとSAVEボタンがあります

これらのコントロールのデータ ソースを表すクラスを作成し、各プロパティの検証を行い、検証メッセージをスローする同じクラスに検証メソッドを実装しました。

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 に答える