我正在努力应对(ish)。我在窗体底部有一个窗体和一个flowgridlayout面板。在这个表单里面,我用X个用户控件动态地填充它。这些控件都是相同的类型。Winform - 确定鼠标是否已经离开用户控制
目标是当用户将鼠标移到用户控件上时,它会打开另一个窗体并将其放置在鼠标所在的位置。当鼠标离开窗体时,打开的窗体消失。
这几乎很好。问题出在用户控件的内部有类似标签或文本框的情况。它被认为已经离开了UC,所以形式消失了。
我的想法是使用X和Y来判断它是否在UC内部,但我无法弄清楚。
我能问:
1)什么是这个最好的方法? 2)我如何编码它,因为UC是动态的,我不知道它们到底在哪里。
感谢
编辑
我试图找出鼠标指针,但是没有到达那里。下面的代码是UC SmallTagBox_MouseLeave事件内:
Point loc = this.Location;
Point p = this.PointToScreen(this.Location);
Point p2 = this.PointToScreen(this.Parent.Location);
Point ms = MousePosition;
Rectangle screenBounds = new Rectangle(this.PointToScreen(this.Location), this.Size);
if (!screenBounds.Contains(ms))
{
thw.Close();
thw = null;
}
- LOC {X = 275 Y = 3} System.Drawing.Point
- p {X = 808 Y = 908} System.Drawing.Point
- p {X = 808 Y = 908} System.Drawing.Point
- P2 {X = 545 Y = 1542} System.Drawing.Point
- 毫秒{X = 574 Y = 914} System.Drawing中。 Point
- screenBounds {X = 808 Y = 908宽度= 62高度= 29} System.Drawing.Rectangle
我不明白如何p2(其父)可以有一个更大的Y值相对于屏幕。
嗨nobugz,我认为这将工作,如果鼠标是弹出窗体内,但鼠标引用是在用户控件。窗体靠近它,但不在顶部,所以鼠标不会进入该窗体。所以我不相信我可以使用DesktopBounds。 – Jon 2009-01-09 11:33:20