C# 滚动鼠标坐标不正确

C# 滚动鼠标坐标不正确,c#,winforms,C#,Winforms,当我试图在一个可以滚动的面板上画一个矩形时,我不知所措。矩形在网格上绘制,因此它们的起始位置被四舍五入到最接近的50px。 绘制矩形时,其绘制位置相对于滚动后的网格线不正确。 但是,当绘制网格后滚动网格时,它会与面板一起滚动 我尝试过偏移鼠标的坐标,我正在使用mouseDown、Move和Up事件,但没有效果。每一个矩形都是在鼠标按下时绘制的,然后向右拖动,直到完成绘制的释放,然后随着鼠标的移动而增大大小。下面是一些我可能已经厌倦的事情 Point screenPos = new Point(M

当我试图在一个可以滚动的面板上画一个矩形时,我不知所措。矩形在网格上绘制,因此它们的起始位置被四舍五入到最接近的50px。 绘制矩形时,其绘制位置相对于滚动后的网格线不正确。 但是,当绘制网格后滚动网格时,它会与面板一起滚动

我尝试过偏移鼠标的坐标,我正在使用mouseDown、Move和Up事件,但没有效果。每一个矩形都是在鼠标按下时绘制的,然后向右拖动,直到完成绘制的释放,然后随着鼠标的移动而增大大小。下面是一些我可能已经厌倦的事情

Point screenPos = new Point(MousePosition.X, MousePosition.Y);
Point relLocation = grid.PointToClient(screenPos);

Point relLocation = e.Location;
relLocation.Offset(AutoScrollPosition);

以下是在鼠标事件中使用网格和滚动位置的计算:

   int grid = 50; 
   int x = e.X - (yourPanel.HorizontalScroll.Value / grid ) * grid ;
   currentPoint =  new Point((x / grid ) * grid , (e.Y / grid ) * grid ); 
不确定您绘制的准确程度,因为您尚未向我们显示代码,但这应该可以找到一个位置,该位置当前位于网格上


我没有包括垂直滚动,但你明白了..

当你滚动窗口的一小部分时,窗口就会失效。真正的问题是,如果隐藏窗口并再次恢复,在这种情况下窗口是否绘制正确?顺便说一句,我们需要更多的绘图逻辑。你也可以在表单上放置2个文本框,然后简单地将计算出的x和y位置的值存储在relLocation中,这样你就可以直观地检查它们是否有意义。我添加了一个屏幕截图,并将更新有关绘图逻辑的更多信息。谢谢,我已经基本上得到了它的工作需要更多的一些无关的调整。正如您所建议的,yourPanel.horizontalcoll.Value与我所追求的一样,令人恼火的是,它没有内置的函数来实现这一点!