我正在努力解决我认为应该很容易(ish)的事情。我在窗体底部有一个 windows 窗体和一个 flowgridlayout 面板。在这个表单中,我用 X 个用户控件动态填充它。控件都是同一类型。
目标是当用户将鼠标悬停在用户控件上时,它会打开另一个表单并将其定位在鼠标所在的位置。当鼠标离开窗体打开的窗体消失。
这几乎效果很好。问题是当用户控件里面有标签或文本框之类的东西时。它被认为已离开 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
- ms {X = 574 Y = 914} System.Drawing.Point
- screenBounds {X = 808 Y = 908 宽度 = 62 高度 = 29} System.Drawing.Rectangle
我不明白 p2 (其父级)如何相对于屏幕具有更大的 Y 值。