と のハンドラーを持つ Form サブクラスがありMouseHover
ますMouseLeave
。ポインターがウィンドウの背景にある場合、イベントは正常に機能しますが、ポインターがウィンドウ内MouseLeave
のコントロールに移動すると、イベントが発生します。
とにかく、ウィンドウ全体をカバーするイベントがありますか?
(.NET 2.0、Visual Studio 2005、Windows XP。)
と のハンドラーを持つ Form サブクラスがありMouseHover
ますMouseLeave
。ポインターがウィンドウの背景にある場合、イベントは正常に機能しますが、ポインターがウィンドウ内MouseLeave
のコントロールに移動すると、イベントが発生します。
とにかく、ウィンドウ全体をカバーするイベントがありますか?
(.NET 2.0、Visual Studio 2005、Windows XP。)
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
//...
}
}
}
}
マウスを離すイベントが発生したときのオプションの 1 つは、ポインターの現在の位置をチェックし、それがフォーム領域内にあるかどうかを確認することです。より良いオプションが利用可能かどうかはわかりません。
編集:あなたが興味を持っているかもしれない同様の質問があります. マウスがフォーム全体とC#の子コントロール内にあるかどうかを検出する方法は?
ユーザーコントロールで、このようなコントロールのマウスホバーイベント(または他のイベントタイプ)を作成します
private void picBoxThumb_MouseHover(object sender, EventArgs e)
{
// Call Parent OnMouseHover Event
OnMouseHover(EventArgs.Empty);
}
UserControl をホストする WinForm では、UserControl が MouseOver を処理するためにこれを持っているので、これを Designer.cs に配置します。
this.thumbImage1.MouseHover += new System.EventHandler(this.ThumbnailMouseHover);
WinFormでこのメソッドを呼び出すもの
private void ThumbnailMouseHover(object sender, EventArgs e)
{
ThumbImage thumb = (ThumbImage) sender;
}
ThumbImage はユーザーコントロールのタイプです