全体のウィンドウ全体にMouseHover / MouseLeaveイベント
-
19-09-2019 - |
質問
私はMouseHover
とMouseLeave
のためのハンドラを持つフォームのサブクラスを持っています。ポインタがウィンドウの背景にある場合は、イベントは正常に動作しますが、ときにコントロールの上にポインタが移動しての の内窓は、それがMouseLeave
イベントが発生します。
イベントウィンドウ全体をカバーを持ってとにかくあります。
(。NET 2.0、Visual Studio 2005の、WindowsのXP。)
解決
マウス休暇イベントが発生した場合、
一つの選択肢は、ポインタの現在位置を確認し、その場合、フォーム領域内に確認することです。私はより良いオプションが利用可能であるかどうかを確認していない。
編集:私たちはあなたに興味があるかもしれない同様の質問があります。 マウスは、C#で全体フォームと子コントロール内にあるかどうかを検出する方法ですか
他のヒント
マウスは、子コントロールに入る限り、トリガしないようにMouseLeaveイベントを上書きする
protected override void OnMouseLeave(EventArgs e)
{
if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition)))
return;
else
{
base.OnMouseLeave(e);
}
}
コンテナコントロールのMouseLeaveが信頼できるようにする良い方法はありません。タイマーでこの問題をパントます:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
timer1.Interval = 200;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Enabled = true;
}
private bool mEntered;
void timer1_Tick(object sender, EventArgs e) {
Point pos = this.PointToClient(Cursor.Position);
bool entered = this.ClientRectangle.Contains(pos);
if (entered != mEntered) {
mEntered = entered;
if (!entered) {
// Do your leave stuff
//...
}
}
}
}
ユーザーコントロールでは、この、(または他のイベントタイプ)のようなあなたの制御のためのMouseHoverイベントを作成します。
このようなprivate void picBoxThumb_MouseHover(object sender, EventArgs e)
{
// Call Parent OnMouseHover Event
OnMouseHover(EventArgs.Empty);
}
ユーザーコントロールをホストするあなたのWinFormには、マウスオーバーで写真ので、あなたのDesigner.csでこれを置くハンドルにユーザーコントロールのためにこれを持っている。
this.thumbImage1.MouseHover += new System.EventHandler(this.ThumbnailMouseHover);
どの
あなたのWinFormに、このメソッドを呼び出しますprivate void ThumbnailMouseHover(object sender, EventArgs e)
{
ThumbImage thumb = (ThumbImage) sender;
}
ThumbImageは、ユーザーコントロールのタイプを表します。
所属していません StackOverflow