MouseHover/MouseLeave event on the whole entire window

血红的双手。 提交于 2019-12-18 12:28:30

问题


I have Form subclass with handlers for MouseHover and MouseLeave. When the pointer is on the background of the window, the events work fine, but when the pointer moves onto a control inside the window, it causes a MouseLeave event.

Is there anyway to have an event covering the whole window.

(.NET 2.0, Visual Studio 2005, Windows XP.)


回答1:


When the mouse leave event is fired one option is to check for the current position of the pointer and see if it within the form area. I am not sure whether a better option is available.

Edit: We have a similar question which might be of interest to you. How to detect if the mouse is inside the whole form and child controls in C#?




回答2:


Ovveride the MouseLeave event to not trigger so long as the mouse enters a child control

    protected override void OnMouseLeave(EventArgs e)
    {
        if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition)))
            return;
        else
        {
            base.OnMouseLeave(e);
        }
    }



回答3:


There is no good way to make MouseLeave reliable for a container control. Punt this problem with a timer:

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
                //...
            }
        }
    }
}



回答4:


On your user control create a mousehover Event for your control like this, (or other event type) like this

private void picBoxThumb_MouseHover(object sender, EventArgs e)
{
    // Call Parent OnMouseHover Event
    OnMouseHover(EventArgs.Empty);
}

On your WinForm which hosts the UserControl have this for the UserControl to Handle the MouseOver so place this in your Designer.cs

this.thumbImage1.MouseHover += new System.EventHandler(this.ThumbnailMouseHover);

Which calls this method on your WinForm

private void ThumbnailMouseHover(object sender, EventArgs e)
{

    ThumbImage thumb = (ThumbImage) sender;

}

Where ThumbImage is the type of usercontrol



来源:https://stackoverflow.com/questions/2015101/mousehover-mouseleave-event-on-the-whole-entire-window

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!