2010-12-05 12 views
1

次の例を使用して、無効なボタンの上にツールチップを表示しています。 How can I show a tooltip on a disabled button?GetChildAtPointは無効なコントロールのみを返しますか?

ボタンはパネル内にあり、フォーム自体ではなく、パネルにMouseMoveイベントを添付します。 驚いたことに、ボタンが有効な場合、GetChildAtPointはnullを返します。ボタンは、無効になっている場合にのみ返されます。 ボタンの位置を確認しました。有効にしたときと無効にしたときに同じですが、その両方の親がパネルです。

明確になります。 MouseMoveイベントはすべてのコントロールで呼び出され、その内部にはGetChildAtPointメソッドでの使用方法があります。ボタンが有効な場合、MouseMoveが呼び出され、GetChildAtPointがnullを返します。無効にすると、MouseMoveが呼び出され、GetChildAtPointがボタンを返します。

このコードがなぜ機能するのか分かりません。どんな助けでも大変感謝しています。

答えて

5

マウスの下のウィンドウに送信されるWM_MOUSEMOVEからGetChildAtPointを呼び出しています。無効なコントロールはWM_MOUSEMOVEを受信しないため、親に送信されます。有効なコントロールはメッセージを自分で取得し、親はそれを取得しません。

+0

ご協力ありがとうございますが、あなたが何を意味しているのかを十分に理解している - MouseMoveメッセージ/有効なボタンで呼び出された場合、GetChildAtPointは単にnullを返します。 – Rita

+0

@Rita:いいえ、MouseMoveメッセージは、マウスが有効になっているコントロール上を移動するときに、親フォームに対して決して発生しません。だから、GetChildAtPointが動作しないわけではなく、広告されたとおりに動作します。 GetChildAtPointが子を返すところでMouseMoveメッセージを取得していないことです。 – Tergiver

+0

これを確認するには、MouseMoveイベントハンドラにConsole.WriteLineメッセージを追加してe.Locationをダンプします。次に、出力ウィンドウをバックグラウンドで表示してプログラムをデバッグし、マウスを動かします。 – Tergiver

関連する問題