在存储坐标时获取滚动偏移量

本文关键字:滚动 偏移量 获取 存储 坐标 | 更新日期: 2023-09-27 18:35:36

我正在研究一个表单,该表单在单击鼠标时获取并绘制一个点。我对如何正确获取和添加滚动偏移量以便正确绘制点感到困惑。例如,现在当我添加一个左上角坐标为 (0,0) 的点时,该点会重新绘制自身并随着滚动操作移动,而不是停留在最初创建它的位置。我已经设定了

this.AutoScroll = true

并手动设置了最小尺寸

this.AutoScrollMinsSize = new Size(800,600);

到目前为止,我的鼠标单击事件如下所示:

if (e.Button == MouseButtons.Left)
{
  Point newPoint = new Point(e.X, e.Y);
  p.X += this.AutoScrollOffset.X;
  p.Y += this.AutoScrollOffset.Y;
  this.Invalidate();
}

使用自动滚动偏移属性将点保留在它们所属的位置而不是在滚动时移动的正确方法是什么?

我应该补充一点,我的程序还会覆盖 Scroll 事件以在发生滚动事件时重新绘制,以解决留下可见区域后绘图消失的问题。

在存储坐标时获取滚动偏移量

AutoScrollOffset 不是要使用的正确属性。 它的用途非常有限,当使用 ScrollControlIntoView() 方法时,它可以对滚动位置应用偏移量。 这是非常罕见的,我自己从来没有用过。

您需要改用 AutoScrollPosition 属性:

    if (e.Button == MouseButtons.Left) {
        var newPoint = new Point(e.X - this.AutoScrollPosition.X,
                                 e.Y - this.AutoScrollPosition.Y);
        // etc..
    }

请注意,减法是必需的,有点不直观。