我正在制作一个包含可选项目的面板。这首先完美地工作,但我的面板长45,000像素,我无法选择超过2 ^ 16/2(32,600个东西)的任何东西。我获得了相对于面板的位置,而不是屏幕或程序。
我目前正在使用此代码:
private void Panel_MouseClick(object sender, MouseEventArgs e)
{
Point screenPos = Panel.PointToClient(Cursor.Position);
...
}
我也尝试过,如下面的代码,但它也无法正常工作,例如(沿面板宽度为30,000像素,返回58,404,向下高度为4,000像素,返回7,032):
private void Panel_MouseClick(object sender, MouseEventArgs e)
{
Point screenPos = Panel.PointToClient(new Point(e.X, e.Y));
....
}
有没有办法使用cursor.Position
但范围更广?
修改 奇怪的是,当在MouseMove事件中执行此操作时,它可以返回高于2 ^ 16/2的值
private void Panel_MouseMove(object sender, MouseEventArgs e)
{
Point screenPos = Panel.PointToClient(Cursor.Position);
Coordinate.Text = screenPos.ToString();
...
}
这在我的面板中到处显示正确的值但是即使我使screenPos成为一个全局变量并在我的MouseClick事件上使用该变量它也不起作用
EDIT2 发现问题是当值很高时,MouseClick事件不起作用(发现它与MouseMove tho一起使用有点奇怪)。现在我已经尝试从mousemove获取最新的坐标(只有在悬停面板时才会更新)。现在我需要获得另一个MouseClick Eventhandler,我在较小的面板上尝试了它,它拥有非常大的面板,但这不起作用。还尝试了整个Form上的处理程序,但是这只会在我不点击任何元素时注册一个单击,所以不在面板上。
还有其他解决方案吗?