문제

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;
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top