質問

私はMouseHoverMouseLeaveのためのハンドラを持つフォームのサブクラスを持っています。ポインタがウィンドウの背景にある場合は、イベントは正常に動作しますが、ときにコントロールの上にポインタが移動しての の内窓は、それが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は、ユーザーコントロールのタイプを表します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top