我遇到了一些问题,我认为应该(相对)容易解决。我有一个窗体和位于窗体底部的流动网格布局面板。在这个窗体里,我动态地添加了X个用户控件。这些控件都是相同类型的。
我的目标是,当用户将鼠标悬停在用户控件上时,它会打开另一个窗体,并将其定位在鼠标位置。当鼠标离开窗体时,打开的窗体消失。
这几乎完美地实现了。问题是,当用户控件内有像标签或文本框之类的任何东西时,它被视为已经离开了用户控件,所以窗体消失了。
我的想法是使用X和Y来确定它是否在UC内部,但我无法弄清楚如何做到这一点。
可以问一下:
1)最好的方法是什么? 2)如何编码,因为UC是动态的,我无法确定它们的确切位置。
谢谢
编辑
我正在尝试找出鼠标指针的位置,但还没有成功。下面的代码在UC SmallTagBox_MouseLeave事件中:
我的目标是,当用户将鼠标悬停在用户控件上时,它会打开另一个窗体,并将其定位在鼠标位置。当鼠标离开窗体时,打开的窗体消失。
这几乎完美地实现了。问题是,当用户控件内有像标签或文本框之类的任何东西时,它被视为已经离开了用户控件,所以窗体消失了。
我的想法是使用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 Width = 62 Height = 29} System.Drawing.Rectangle
我不明白为什么相对于屏幕,p2(其父元素)的Y值可以更大。