2011-06-28 8 views
0

何らかの理由で、MouseHoverとMouseLeave関数が本当に変です。私がする必要があるのは、カーソルが「ボタン」の上にあるときに、ボタンを表示させたいのです。そして、カーソルがボタンを離れるとき、私はそれを不可視にします。私が何を試しても、私はそれを動作させることができませんでした。コントロールオブジェクトが見えなくなったときにマウスイベントが機能しないようです。C#WinForms MouseHoverとMouseLeaveの問題

private void button1_MouseHover(object sender, EventArgs e) 
{ 
    button1.Visible = true; 
} 

private void button1_MouseLeave(object sender, EventArgs e) 
{ 
    button1.Visible = false; 
} 
+5

* "コントロールオブジェクトが見えなくなったときにマウスイベントが機能しないようです" * - Ummm ... yup –

+0

参照:http://blogs.msdn.com/b/oldnewthing/archive/2006/03 /23/558887.aspx –

答えて

6

まあ...それはどのように動作するのですか。 (私は、フォームを想定)ボタンのMouseLeaveイベントを処理続行とその親のためのMouseMoveを扱う:彼らは「存在しない」ので

private void Form_MouseMove(object sender, MouseEventArgs e) { 
    if(button1.Bounds.Contains(e.Location) && !button1.Visible) { 
     button1.Show(); 
    } 
} 
+0

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

1

簡潔なコメントが示すように、目に見えないオブジェクトは、マウスによって認識されません。

0

Panelのボタンを、ボタンを正確に収まる大きさにして置きます。その後、パネル上にMouseEnterMouseLeaveをフックします。ボタンを表示/非表示にする。パネルが常に表示されたままにしておくと、マウスイベントが発生します。

0

これはどのように動作するのですか。目に見えないコントロールはマウスイベントに応答しません。

デザインの見直しはどうですか?マウスがスクロールしたときにのみ表示される目に見えないコントロールは、「使いにくい」と叫びます。親コンテナやコントロール上にマウスカーソルを置いたときに表示される少々の子コントロールを理解することはできますが、唯一のボタンではなく、純粋に運が見つかるまでは見えません。ボタンを別のコンテナにラップして、コンテナのマウスイベントを処理することもできます。

関連する問題