質問

私はカスタムコントロールを作成しようとしており、そこからイベントを提起する必要があります。アイデアは、クリックイベントの最後にイベントを提起することです(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」に暗黙的に変換することはできません

誰かが私が何が欠けているのか教えてもらえますか、それともこれについて誤解してください。

役に立ちましたか?

解決

あなたのイベントはタイプであると宣言されています AfterClickEvnt, 、しかし、あなたはそれを使用してそれを購読しようとしています EventHandler. 。 2つを変換することはできません。

オプション:

  • 正しいタイプを明示的に述べてください:

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

    this.MyButton.AfterClick += cmdMyButton_Click;
    

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

public event EventHandler<AfterClickEventArgs> AfterClick;

他のヒント

あなたのコードにはいくつかの矛盾があるので、何が起こっているのかを言うのは難しいです。 (MyargsはNewargsになり、AfterclickupdateevntはAfterclickevntになりました)。また、デリゲートの代わりにイベントハンドラーを使用しようとします。

また、使用する方が良いです EventHandler<T> そのため、代表者を悩ませる必要はありません。

public event EventHandler<AfterClickEventArgs> AfterClick;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top