私はC#.NET 2.0 WinFormsアプリケーションを持っています。私のアプリケーションには、ラベルと何らかの編集コントロールの2つの子コントロールのコンテナがあります。私はマウスが親コントロールに入るか、離れたときに何かをしようとしていますが、マウスが移動する場合、私は気にしない親コントロールマウス子コントロールを使用したイベントの入力/終了
+---------------------------------+ | [Label Control] [Edit Control] | +---------------------------------+
:あなたは外箱が親コントロールであるところ、この、のように考えることができその子供の一人に私は、 "マウスは親または子の中のどこかにある"と "マウスが親のコントロール境界の外に移動しました"を表す単一のフラグを必要とします。
親コントロールと子コントロールの両方でMouseEnterとMouseLeaveを処理しようとしましたが、これはマウスがコントロールを移動するにつれてアクションが複数回開始され、終了することを意味します。言い換えれば、私はこれを取得:
Parent.OnMouseEnter (start doing something) Parent.OnMouseLeave (stop) Child.OnMouseEnter (start doing something) Child.OnMouseLeave (stop) Parent.OnMouseEnter (start doing something) Parent.OnMouseLeave (stop)
何でも私がやっているが開始してから停止しますように、中間OnMouseLeaveイベントは、いくつかの望ましくない影響を引き起こします。私はそれを避けたい。
子コントロールがマウスイベントを必要とし、メニューや他のショートカットキーを機能させたいので、親がマウスオーバーするとマウスをキャプチャしたくありません。
.NETフレームワーク内でこれを行う方法はありますか?または、Windowsマウスフックを使用する必要がありますか?
私は現在の親を残す場合は、私は知りません事前に私は子供のコントロールに行くか、実際に親を離れる。私があなたが示唆したようにしたら、親のOnMouseLeaveは "やあ、それは私だから処理を続ける"と言わなければならないだろう。 –
あなたのコントロール格納構造体があまりにも柔軟である必要がない場合、つまりnレベルの包含である場合、および/または親の型を考慮に入れる場合は、この方法を使用することができます。 たとえば、Enterイベントが発生した場合、GroupBoxまたはPanel(ボタンを含むもの)が表示され、その値への参照を評価するまで、そのコントロールを取得して包含ツリーまで歩きます。それが変わるとき。 –