问题
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