2009-12-22 53 views
3

我在C#,WindowsForms中创建了一个项目,并创建了一个panel,其中包含比他的父项大得多的pictureBox面板中的移动图片框

我转身panel.AutoScrolltrue,我想要做的就是拖着这pictureBoxpanel,而不是追赶滚动,移动它是什么。

I.e.当我抓取图像并将光标向左和向下移动时,我想获得与我将使用panel的卷轴完全相同的行为。

怎么办?

回答

4

好吧,我明白了。 ;-)如果任何人有同样的问题,这里是解决方案:

protected Point clickPosition; 
    protected Point scrollPosition; 

    private void pictureBox_MouseDown(object sender, MouseEventArgs e) 
    { 
     this.clickPosition.X = e.X; 
     this.clickPosition.Y = e.Y; 
    } 

    private void pictureBox_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      scrollPosition.X = scrollPosition.X + clickPosition.X - e.X; 
      scrollPosition.Y = scrollPosition.Y + clickPosition.Y - e.Y; 
      this.panel.AutoScrollPosition = scrollPosition; 
     } 
    } 
0

的HSZ解决方案:)

protected Point clickPosition; 
    protected Point scrollPosition; 

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     this.clickPosition = e.Location;    
    } 

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      this.SuspendLayout(); 
      this.scrollPosition += (Size)clickPosition - (Size)e.Location; 
      this.panel1.AutoScrollPosition = scrollPosition;      
      this.ResumeLayout(false); 
     } 
    } 
0

从HSZ的改善解决方案”,以滚动的限制更小的变型,但我只允许垂直滚动

protected Point clickPosition; 
protected Point scrollPosition; 

private void picBoxScan_MouseDown(object sender, MouseEventArgs e) 
{ 
    this.clickPosition.X = e.X; 
    this.clickPosition.Y = e.Y; 
} 

private void picBoxScan_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     scrollPosition.X = panelViewFile.AutoScrollPosition.X; 
     scrollPosition.Y = scrollPosition.Y + (clickPosition.Y - e.Y); 
     scrollPosition.Y = Math.Min(scrollPosition.Y,panelViewFile.VerticalScroll.Maximum); 
     scrollPosition.Y = Math.Max(scrollPosition.Y,panelViewFile.VerticalScroll.Minimum); 
     panelViewFile.AutoScrollPosition = scrollPosition; 
    } 
}