2

長いコンテキストメニューがあり、アイテムに視覚効果を追加したかったので(いいえ、新しいレンダラーを作成したくありません)、リストアイテムの1つに対してMouseEnterイベントとMouseLeaveイベントを作成しました。ここで、項目ごとに2つの個別のイベントを作成せずに、これをすべてのコンテキストメニュー項目に拡張したいと思います...

これが私が現在持っているものの短い例です:

Private Sub NewMenuItems_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewMenuItem1.MouseEnter, NewMenuItem2.MouseEnter, etc.
    MenuItem.ForeColor = Color.Red
End Sub

Private Sub NewMenuItems_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewMenuItem1.MouseLeave, NewMenuItem2.MouseLeave
    MenuItem.ForeColor = Color.Cyan
End Sub

アイテムごとに異なるのは、「。Forecolor」の前にあるものだけです。これをすべてのアイテムで同時に機能させるにはどうすればよいですか?

4

1 に答える 1

7

のすべてのインスタンスがMenuItem同じイベントハンドラーを使用している場合、パラメーターを使用して実際に呼び出したインスタンスを区別できsenderます。パラメーターは、イベントを呼び出したインスタンスを参照する必要があります。だから、にキャストsenderするだけMenuItemで、それがあなたが探しているものです。

もちろん、キャストには常に注意する必要があることに注意してください。この場合、MenuItemこのハンドラーを呼び出すのはaだけであることを確認する必要があります。そうでない場合は、別のオブジェクトがそれを呼び出した場合に、キャストでエラーチェック/処理を行う必要があります。

于 2013-01-04T02:18:28.207 に答える