C# 移动面板中的图片框

C# 移动面板中的图片框,c#,winforms,panel,picturebox,C#,Winforms,Panel,Picturebox,我在C#、WindowsForms中有一个项目,我创建了一个面板,其中包含一个图片盒,比他的父母大得多 我将panel.AutoScroll转到true,我想做的是在panel中拖动这个pictureBox,而不是捕捉一个滚动并移动它 也就是说,当我抓取一幅图像并将光标向左和向下移动时,我希望得到与使用面板的卷轴时相同的行为 怎么做?好的,我知道了如果其他人也有同样的问题,以下是解决方案: protected Point clickPosition; protected Poin

我在C#、WindowsForms中有一个项目,我创建了一个
面板
,其中包含一个
图片盒
,比他的父母大得多

我将
panel.AutoScroll
转到
true
,我想做的是在
panel
中拖动这个
pictureBox
,而不是捕捉一个滚动并移动它

也就是说,当我抓取一幅图像并将光标向左和向下移动时,我希望得到与使用
面板
的卷轴时相同的行为

怎么做?好的,我知道了如果其他人也有同样的问题,以下是解决方案:

    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解决方案的较小变体:)


一个改进的解决方案,从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;
    }
}
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;
    }
}