【问题标题】:scrolled mouse coordinates not correct滚动的鼠标坐标不正确
【发布时间】:2015-05-26 04:17:22
【问题描述】:

尝试在可滚动的面板上绘制矩形时不知所措。矩形绘制在网格上,因此它们的起始位置四舍五入到最接近的 50 像素。
绘制矩形时,它们的绘制位置在滚动后相对于网格线不正确。
但是,当网格在绘制后滚动时,它会随着面板滚动。

我试图偏移鼠标的坐标(我正在使用 mouseDown、Move 和 Up 事件)但无济于事。每个矩形在鼠标向下绘制,然后向右拖动直到完成绘制的释放(绘制,然后随着鼠标移动增加大小)。以下是我可能厌倦的一些事情

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

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

【问题讨论】:

  • 当您滚动时,只有一小部分窗口会失效。真正的问题是,如果您隐藏窗口并再次恢复它,在这种情况下是否正确绘制了窗口?顺便说一句,我们需要更多的绘图逻辑。
  • 您还可以通过在表单上放置 2 个文本框并简单地将计算的 x 和 y 位置的值存储在 relLocation 中来帮助自己,这样您就可以直观地检查它们是否有意义。
  • 我添加了一个屏幕截图,并将更新有关绘图逻辑的更多信息

标签: c# winforms


【解决方案1】:

这是使用您的网格和鼠标事件中的滚动位置的计算:

   int grid = 50; 
   int x = e.X - (yourPanel.HorizontalScroll.Value / grid ) * grid ;
   currentPoint =  new Point((x / grid ) * grid , (e.Y / grid ) * grid ); 

不确定你画得有多准确,因为你没有向我们展示代码,但这应该可以找到一个位置,即当前在你的网格上..

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

【讨论】:

  • 谢谢,我基本上已经搞定了(需要更多不相关的调整)。就像你建议的那样,yourPanel.HorizontalScroll.Value 就像我所追求的一样,烦人的是没有内置函数可以做到这一点!
猜你喜欢
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2013-09-02
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
  • 2021-09-15
相关资源
最近更新 更多