2011-08-16 6 views
0

IExtenderProviderを使用してコントロールにプロパティを追加するなど、コントロールにイベントを追加する方法はありますか?コントロールイベントを拡張する方法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 
      //-------------------------- 
     } 
    } 
} 

答えて

1

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

あなたのやり方に問題があります。コントロールはエラーテキストを設定できますが、ErrorProviderは設定できません。または、それ以外の方法でもどちらも良いことではありません。独自のErrorProviderをクラスのプライベートメンバーとして保持するか、プロパティを使用して割り当てることが最善です。 1つで十分です。

+0

errorproviderもerrortextも指定されていない場合は何も起こりません。これは私がそれを望む方法です。 SetErrorTextはerrortextを割り当てるためのもので、errorproviderエントリをただちに作成するのではありません。私が見つけたいくつかのgoogeling後、イベントを拡張することはできません。私は今、Control.Leaveイベントのメソッド(Show/Hide)を呼び出しています。 – Wowa

関連する問題