2013-10-16 43 views
2

我的形式,采用和借鉴了鼠标点击一个点上工作时的偏移。我很困惑如何正确地获取和添加滚动偏移量,以便可以正确绘制点。例如,现在当我添加一个点,左上角坐标为(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事件当滚动事件发生时修复图纸一旦消失可见区域留下的问题重绘。

回答

2

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

您需要使用AutoScrollPosition属性改为:

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

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