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

时间:2013-10-16 19:32:44

标签: c#

我正在处理一个表单,该表单在鼠标单击时获取并绘制一个点。我对如何正确获取和添加滚动偏移感到困惑,以便可以正确绘制点。例如,现在当我添加左上坐标为(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();
}

使用AutoScrollOffset属性来保持它们所属的点而不是在滚动时移动的正确方法是什么?

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

1 个答案:

答案 0 :(得分:2)

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

您需要使用AutoScrollPosition属性:

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

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