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

C# 存储坐标时获取滚动偏移量,c#,C#,我正在制作一个表单,它通过鼠标点击来获取并绘制一个点。我对如何正确获取和添加滚动偏移量感到困惑,这样才能正确绘制点。例如,现在当我在左上角坐标为(0,0)的位置添加一个点时,该点会重新绘制自身并随着滚动动作移动,而不是停留在最初创建该点的位置。我已经准备好了 this.AutoScroll = true 并手动设置了最小尺寸 this.AutoScrollMinsSize = new Size(800,600); 以下是迄今为止我的鼠标单击事件的外观: if (e.Button == Mou

我正在制作一个表单,它通过鼠标点击来获取并绘制一个点。我对如何正确获取和添加滚动偏移量感到困惑,这样才能正确绘制点。例如,现在当我在左上角坐标为(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();
}
使用AutoScrolOffset属性保留点所属位置而不是在滚动时移动点的正确方法是什么


我应该补充一点,当发生滚动事件时,我的程序也会覆盖滚动事件以重新绘制,以修复图形在离开可见区域后消失的问题。

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

您需要改用AutoScrollPosition属性:

    if (e.Button == MouseButtons.Left) {
        var newPoint = new Point(e.X - this.AutoScrollPosition.X,
                                 e.Y - this.AutoScrollPosition.Y);
        // etc..
    }
请注意,减法是必需的,有点不直观