2009-12-22 3 views
3

J'ai un projet en C#, WindowsForms et j'ai créé un panel qui contient un pictureBox beaucoup plus grand que son parent.Moving pictureBox dans le panneau

Je retournai à panel.AutoScrolltrue et ce que je veux faire est de glisser ce pictureBox dans panel au lieu d'attraper un rouleau et en le déplaçant.

I.e. quand je prends une image et déplace le curseur vers la gauche et vers le bas, je voudrais avoir le même comportement que je le ferai avec les parchemins panel.

Comment le faire?

Répondre

4

Ok, je l'ai compris. ;-) Si quelqu'un d'autre a le même problème, voici la solution:

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

une variante plus petite de la solution 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

une solution améliorée de hsz », avec limitation de défilement, mais je n'autorise que le défilement vertical

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; 
    } 
}