1

カスタムコントロールを作成しようとしていますが、そこからイベントを発生させる必要があります。アイデアは、クリックイベント(OnAfterClick)の最後にイベントを発生させることです。これを行うためのチュートリアルを1つか2つ見つけましたが、明らかにどこかにステップがありません。私は以下を持っています。

コントロール内:

public class AfterClickEventArgs : EventArgs
{
  ...
}

public partial class MyButton : CommandButton
{
    public delegate void AfterClickEvnt(object sender, AfterClickEventArgs e);

    public event AfterClickUpdatedEvnt AfterClick;

}

protected override void OnClick(EventArgs e)
{
    ...
    Processing here
    ...

    AfterClickEventArgs myArgs = new AfterClickEventArgs();                
    AfterClick(this, myArgs);
}

コントロールを使用するプログラムでは、次のようになります。

InitializeComponent()の場合:

this.MyButton.AfterClick += new System.EventHandler(this.cmdMyButton_Click);

この行は私にコンパイルエラーを与えています(cmdMyButton_Clickは存在します)。タイプ「System.EventHandler」を「Namespace.MyButton.AfterClick」に暗黙的に変換することはできません。

誰かが私が欠けているもの、またはこれについて誤解していることを教えてもらえますか?

4

2 に答える 2

3

イベントはタイプAfterClickEvntであると宣言されていますが、を使用してサブスクライブしようとしていますEventHandler。2つの間で変換することはできません。

オプション:

  • 適切なタイプを明示的に記述します。

    this.MyButton.AfterClick += new AfterClickEvnt(this.cmdMyButton_Click);
    
  • 暗黙的なメソッドグループ変換を使用します。

    this.MyButton.AfterClick += cmdMyButton_Click;
    

ちなみに、カスタムデリゲートタイプを削除し、代わりにジェネリックEventHandler<T>デリゲートを使用することをお勧めします。

public event EventHandler<AfterClickEventArgs> AfterClick;
于 2010-05-01T14:29:12.627 に答える
0

あなたのコードにはいくつかの矛盾があるので、何が起こっているのかを言うのは難しいです。(myArgsはnewArgsになり、AfterClickUpdateEvntはAfterClickEvntになりました)。また、デリゲートの代わりにEventHandlerを使用しようとします。

また、EventHandler<T>デリゲートを気にする必要がないように使用することをお勧めします。

public event EventHandler<AfterClickEventArgs> AfterClick;

于 2010-05-01T14:29:31.053 に答える