Déplacement picturebox dans le panneau
-
20-09-2019 - |
Question
J'ai un projet en C #, WindowsForms et je créé un panel
qui contient un pictureBox
qui est beaucoup plus grand que ses parents.
Je me suis tourné panel.AutoScroll
à true
et ce que je veux faire est 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éplacer le curseur vers la gauche et vers le bas, je voudrais obtenir le même comportement que je vais le faire avec les rouleaux de panel
.
Comment faire?
La solution
Ok, je l'ai. ;-) 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;
}
}
Autres conseils
une plus petite variante 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);
}
}
une solution améliorée de hsz », avec limitation de défilement, mais je ne laisse 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;
}
}