Movendo a PictureBox no painel
-
20-09-2019 - |
Pergunta
Eu tenho um projeto em C#, WindowsForms e criei um panel
que contém a pictureBox
Isso é muito maior que seus pais.
Eu mudei panel.AutoScroll
para true
E o que eu quero fazer é arrastar isso pictureBox
dentro panel
Em vez de pegar um pergaminho e movê -lo.
Ou seja, quando pego uma imagem e movo o cursor para a esquerda e para baixo, gostaria de obter o mesmo comportamento que farei com isso panel
Scrolls.
Como fazer isso ?
Solução
OK, entendi. ;-) Se alguém mais tiver o mesmo problema, aqui está a solução:
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;
}
}
Outras dicas
uma variante menor da solução 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);
}
}
Uma solução aprimorada da HSZ ', com limitação de rolagem, mas permito apenas rolagem 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;
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow