2009-08-13 5 views
1

... C#でホットスポットを作成することは可能ですか?マウスが特定の領域を超えたときにイベントが発生するようにしますか? 、他のコントロールの上にあなたが望む位置に入れ、その上にMouseMoveを扱うC#でホットスポットを作成する

答えて

4

標準Fromオブジェクトは、OnMouseMoveイベントを公開します。

 
protected override void OnMouseMove(MouseEventArgs mouseEvent) 
{ 
    string X = mouseEvent.X.ToString(); 
    string Y = mouseEvent.Y.ToString(); 

    //Add code here to match X & Y to your hot spot coordinates. 
} 
+0

これは理論上は問題ありませんが、通常はホットスポットをいくつかのコントロールと重複させたいと考えています。そして、そのようなコントロールのために 'MouseMove'を扱わなければならず、それに応じてマウス座標を変換しなければなりません。 WPFとは異なり、WinFormsでマウスイベントをプレビューする方法はありません。 –

+0

ありがとうございました。 –

3

は透明Panelhere's how - - その拡張ウィンドウスタイルにWS_EX_TRANSPARENTビットを設定することで、真に透明)を作成します。

+1

WinFormsには本当に透明なパネルはありません。あなたが記述したようにパネルを作成し、それを他のコントロール/他のパネルと重複させると、パネルの背後にあるコントロールではなくフォームの背景が実際に表示されます。 –

+2

@エリック、私の答えをもう一度、注意深く読んでください - 特に "本当に透明な"とWS_EX_TRANSPARENTについての少し。その後、答えのリンクをたどってそれを読んでください。私は特に 'Background'を' Transparent'に設定することについて話しているわけではありません。 –

1

ホットスポットにするコントロールのMouseHoverイベントハンドラを追加します。

+0

ありがとうございますが、私はホットスポットを望む場所にコントロールがありません。ホットスポットは、どこかのフォームの背景に... –

+0

Sequ3Lさんのコメントを見る、あなたのフォームでそのイベントを処理することができます。 –

+1

baeltazor:フォームもコントロールです。 –

0

は、WindowsメッセージをキャプチャするためにWndProcメソッドを使用することができ、またはあなたが取得するためにGetCursorPosを使用することができます:あなたはちょうどそのイベントの座標を扱うことができ、ホットスポットがなる任意のコントロールを持っていないことを考えます画面上のカーソル位置。

+0

これはちょうど 'MouseMove'を扱うだけのものですか?なぜWin32 APIがここに含まれているのですか(この質問はC#/ WinFormsに関するものです)。 –

+0

WinFormsには、この種の操作を「直接」サポートしていません。 パネルの最初の問題は、イベントをキャプチャするための非長方形領域を持つことができないことです。 2つ目の問題は、複数の「領域」が必要な場合、パネルの透明なパネルコントロールを追加しなければならないことがあり、フォームの乱雑さが増すことです。また、透明であっても、別のコントロールがある場合、イベントの受信をサポートしないコントロールもあります。 –

+0

軽いことをしたい場合は、Win32 APIの使用を検討してください。 –

関連する問題