Движущаяся картинка в поле - PullRequest
       29

Движущаяся картинка в поле

4 голосов
/ 22 декабря 2009

У меня есть проект на C #, WindowsForms, и я создал panel, который содержит pictureBox, который намного больше, чем его родитель.

Я превратил panel.AutoScroll в true, и я хочу перетащить pictureBox в panel вместо того, чтобы ловить свиток и перемещать его.

т.е. когда я беру изображение и перемещаю курсор влево и вниз, я хотел бы получить то же поведение, что и при работе со свитками panel.

Как это сделать?

Ответы [ 3 ]

5 голосов
/ 22 декабря 2009

Хорошо, я понял. ;-) Если у кого-то еще есть такая же проблема, вот решение:

    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;
        }
    }  
0 голосов
/ 21 октября 2017

улучшенное решение от 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;
    }
}
0 голосов
/ 22 декабря 2009

меньший вариант решения 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);
        }
    }
...