- PR -

NotifyIconに対するEventHandlerの登録でエラー

1
投稿者投稿内容
WT
常連さん
会議室デビュー日: 2004/07/22
投稿数: 29
投稿日時: 2009-04-03 17:13
C#にてWindowsアプリを作成しています。
このアプリは最小化した際にタスクトレイにアイコンを格納し、タスクトレイのアイコンをダブルクリックすると元の大きさで表示する仕様です。
最小化時にタスクトレイへのアイコン格納はできました。
しかし、タスクトレイのアイコンをダブルクリックした際に、元の大きさで復元(表示)する事が出来ません。

実装方法は以下の通りです。

1)InitializeComponent()メソッドの中で下記一行を追記しました。
  this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);

2)メソッド追加で以下のメソッドを同じクラス内に追加しました。
private void notifyIcon1_DoubleClick(object sender, System.Windows.Forms.MouseEventArgs e)

3)コンパイル(ビルド)すると以下のエラーが発生します。
メソッド 'WindowsApplication1.main_Form.notifyIcon1_DoubleClick(object, System.Windows.Forms.MouseEventArgs)' はデリゲート型 'void System.EventHandler(object, System.EventArgs)' と一致しません。


MSDNのサンプルをそのまま記述しているつもりなのですが、何故かエラーになります。
何が原因かお分かりの方、お教え下さい。
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-04-03 18:32
public event MouseEventHandler MouseClick
マウスクリックイベント
notifyicon.mouseclick

ダブルクリックイベント
notifyicon.doubleclick
のイベントの型をよく見てみてください。

mouseclickはMouseEventHandlerですが
doubleclickはEventHandlerです。

MouseEventHandler
コード:

public delegate void MouseEventHandler (
Object sender,
MouseEventArgs e
)

ですが

EventHandler
コード:

public delegate void EventHandler (
Object sender,
EventArgs e
)

です。

デリゲートの引数に MouseEventArgs と EventArgs の違いがありますね。

イベントで使用するメソッドの引数は、型が同じか、キャスト可能な型でなければいけません。

EventArgs を MouseEventArgs には変換できないため、エラーが発生しているのだと思います。



[ メッセージ編集済み 編集者: セラフ 編集日時 2009-04-03 18:33 ]
WT
常連さん
会議室デビュー日: 2004/07/22
投稿数: 29
投稿日時: 2009-04-06 10:44
>マウスクリックイベント
>notifyicon.mouseclick
>と
>ダブルクリックイベント
>notifyicon.doubleclick
>のイベントの型をよく見てみてください。

見落としてました。
指摘の通り、MouseEventHandlerとEventHandlerの違いがありました。


以下のように修正し、無事、やりたい事が実現できました。
1)InitializeComponent()メソッドの中で下記一行を追記しました。
  this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);

2)メソッド追加で以下のメソッドを同じクラス内に追加しました。
private void notifyIcon1_DoubleClick(object sender, EventArgs e)

※第二引数をEventHandlerに変更しました。


単純なミスでした。アドバイスありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)