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

3

我正在开发一个表单,可以在鼠标点击时获取并绘制点。但是我不确定如何正确获取和添加滚动偏移量,以便可以正确地绘制点。例如,当前当我在左上角坐标为(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个回答

3

AutoScrollOffset不是正确的属性。它的使用非常有限,只能在使用ScrollControlIntoView()方法时将偏移应用于滚动位置。这种情况相当少见,我自己从未使用过。

你需要使用AutoScrollPosition属性代替:

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

请注意,需要进行“减法”,这可能有点不直观。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接