패널에서 사진 상자를 움직입니다
-
20-09-2019 - |
문제
C#, WindowsForms에 프로젝트가 있고 panel
여기에는 a가 포함되어 있습니다 pictureBox
그것은 그의 부모보다 훨씬 큽니다.
나는 돌렸다 panel.AutoScroll
에게 true
그리고 내가하고 싶은 것은 이것을 드래그하는 것입니다 pictureBox
안에 panel
스크롤을 잡고 움직이지 않고.
즉, 이미지를 잡고 커서를 왼쪽과 아래로 옮길 때 나는 내가 할 것과 같은 동작을 얻고 싶습니다. panel
의 스크롤.
어떻게 하는가?
해결책
알았어, 나는 그것을 얻었다. ;-) 다른 사람이 같은 문제가있는 경우 다음은 해결책이 있습니다.
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;
}
}
다른 팁
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);
}
}
스크롤 제한이있는 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;
}
}
제휴하지 않습니다 StackOverflow