10

と のハンドラーを持つ Form サブクラスがありMouseHoverますMouseLeave。ポインターがウィンドウの背景にある場合、イベントは正常に機能しますが、ポインターがウィンドウMouseLeaveのコントロールに移動すると、イベントが発生します。

とにかく、ウィンドウ全体をカバーするイベントがありますか?

(.NET 2.0、Visual Studio 2005、Windows XP。)

4

4 に答える 4

10

MouseLeave イベントをオーバーライドして、マウスが子コントロールに入るまでトリガーしないようにします。

    protected override void OnMouseLeave(EventArgs e)
    {
        if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition)))
            return;
        else
        {
            base.OnMouseLeave(e);
        }
    }
于 2012-08-30T14:36:00.777 に答える
6

コンテナー コントロールに対して 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
                //...
            }
        }
    }
}
于 2010-01-06T18:17:34.910 に答える
6

マウスを離すイベントが発生したときのオプションの 1 つは、ポインターの現在の位置をチェックし、それがフォーム領域内にあるかどうかを確認することです。より良いオプションが利用可能かどうかはわかりません。

編集:あなたが興味を持っているかもしれない同様の質問があります. マウスがフォーム全体とC#の子コントロール内にあるかどうかを検出する方法は?

于 2010-01-06T18:18:49.550 に答える
0

ユーザーコントロールで、このようなコントロールのマウスホバーイベント(または他のイベントタイプ)を作成します

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 はユーザーコントロールのタイプです

于 2011-04-08T19:19:37.800 に答える