2012-04-12 9 views
0

私は別のものからイベントハンドラを呼んでいる:イベントハンドラの周りにEventArgを渡すことは潜在的に危険ですか?

private void launchApplicationToolStripMenuItem_Click(object sender, EventArgs e) { 
      listApplications_DoubleClick(listApplications, null); 
     } 

     private void listApplications_DoubleClick(object sender, EventArgs e) { 

「listApplicationsは、」リストビューです。

ListApplicationsにDoubleClick()イベントの送信者をキャストするため、私はlistApplicationsを渡す必要がありました。

2番目の引数はどうですか?上記のように、私は、nullを渡す必要があり、またはそうのように、私は「e」を渡す必要があります。

listApplications_DoubleClick(listApplications, e); 

どちらの方法が良い状況下で罰金/同じように動作します。しかし、例外があった場合、それが当てはまるかどうかわかりません...

+4

代わりに3番目のメソッドを作成することをお勧めします。このメソッドの名前は、*実際に何が起きるかを記述し、各イベントハンドラに呼び出します。それははるかに明確なコードのためになります。 –

答えて

1

まあ、私は正確に言うwouldn't危険ですが、適切に処理されないと例外などのいくつかの問題が発生する可能性があります。あなたの例では、1つのイベントはクリックイベントであり、もう1つはダブルクリックイベントです。これは、両方のEventArgsオブジェクトeが実際にはMouseEventArgsであることを意味します。どちらかというと、eの存在しないメンバーにアクセスする2番目のイベントハンドラについて心配する必要はありません。

たとえば、ユーザーがボタンをクリックするたびにpaintイベントを呼び出すとします。その場合、clickイベントはpaintイベントを呼び出します。今問題があります:ペイントイベントはPaintEventArgsを予期しているので、MouseEventArgsを渡すと例外が発生する可能性があります。もちろん、両方のコードを管理している場合は、PaintEventArgs固有のメンバーへのアクセスがあるかどうかを自分で調べることができます。もしそうでなければ、このシナリオでは引数を渡すという点は私には分かりませんが、あなたは大丈夫です。

あまりにも紛らわしいものではありません。

1

同じイベントのイベントハンドラを呼び出すとき(つまり、別のdoubleclickイベントからdoubleclickイベントを呼び出すとき)イベント引数を渡す必要があります。イベント引数には、その場所などのダブルクリックに関する重要な情報が含まれています。ハンドラ「チェーンの下」がこれらの引数を気にしない場合は、nullを渡しても問題は発生しません。しかし、とし、呼び出しているハンドラが引数を無視し、それに有効なものを渡すべきではありません。

ここでは、イベント引数を使用してダブルクリックの位置を把握する方法については、an exampleです。

1

あなたはEINメソッドlistApplications_DoubleClick(オブジェクト送信者、EventArgsのe)の体を使用していない場合を除き... nullを送信するために罰金されるまでは、EventArgを渡すと 危険ではない、

関連する問題