0

IExtenderProviderを使用してコントロールにプロパティを追加するなど、コントロールにイベントを追加する方法はありますか?

errorpoviderを使用して独自のバリデーターを作成しようとしています。IExtenderProviderを使用して、errorproviderとerrortextをコントロールに追加しています。今、エクステンダークラスからイベントを発生させる必要があります。

スニペット:

[ProvideProperty("ErrorText", typeof(TextBox))]
[ProvideProperty("ErrorProvider", typeof(TextBox))]
class ValidatorExtender : Component, IExtenderProvider {
    public bool CanExtend(object extendee) {
        return extendee is TextBox;
    }


    [DefaultValue(""), Category("Data")]
    public string GetErrorText(Control control) {
        //---------------------------
        //Return the ErrorText
        //---------------------------
        }
    }

    public void SetErrorText(Control control, string value) {
        //---------------------------
        //Assigning the ErrorText
        //---------------------------
    }

    [DefaultValue(null), Category("Data")]
    public ErrorProviderEX GetErrorProvider(Control control) {
        //---------------------------
        //Return the ErrorProvider
        //---------------------------
    }

    public void SetErrorProvider(Control control, ErrorProviderEX value) {
        //---------------------------
        //Assigning the ErrorProvider
        //---------------------------
    }
                                               //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    public event ValidatingHandler Validating; // -> The event I want to add to the Controls
                                               //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    void Control_Leave(object sender, EventArgs e) {
        if(Validating != null){
            Validating(this, new ValidatingEventArgs());
            //--------------------------
            // Assign Error if necessary
            //--------------------------
        }
    }
}
4

1 に答える 1

1

SetErrorTextメソッドがキーです。エラーテキストがあるコントロールのリスト<>を保持する必要があります。コントロールがまだリストにない場合は、SetErrorTextのリストにコントロールを追加します。そして、その検証イベントをサブスクライブします。value引数がnullまたは空の場合は、リストから削除します。そして、イベントの購読を解除します。これは、IExtenderProviderのMSDNライブラリの記事で詳しく説明されています。そこに示されている例のSetHelpText()メソッドのコードを確認してください。

それを行う方法に問題があります。コントロールはエラーテキストを設定できますが、ErrorProviderは設定できません。またはその逆に、どちらも良くありません。独自のErrorProviderをクラスのプライベートメンバーとして保持するか、プロパティを介して割り当て可能にすることをお勧めします。1つで十分です。

于 2011-08-16T13:49:59.710 に答える