c#面板获取光标位置

时间:2018-03-15 07:58:04

标签: c# cursor panel

我正在制作一个包含可选项目的面板。这首先完美地工作,但我的面板长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上的处理程序,但是这只会在我不点击任何元素时注册一个单击,所以不在面板上。

还有其他解决方案吗?

0 个答案:

没有答案