Как мне переместить изображение в поле для картинок? - PullRequest
0 голосов
/ 22 января 2019

Я хочу, чтобы изображение перемещалось в окне рисунка. Это не должно быть возможно, что вы можете вытащить его. Я нашел ответ с помощью Padding и попробовал его, но он тянет в противоположном направлении. Поэтому я попытался переключить его с помощью правого и нижнего, но он не перетаскивается. Кроме того, я нашел ответ, в котором окно с изображением перемещается, но затем его можно вывести из формы, и его больше нет. Поэтому мне нужно что-то, что может просто переместить изображение в окне рисунка или что-то, что перемещает окно рисунка, но не из формы.

private bool Dragging;
private Point lastLocation;


    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            Dragging = true;
            lastLocation = e.Location;
        }
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
       if (Dragging == true)
       {
            int dx = e.X - lastLocation.X;
            int dy = e.Y - lastLocation.Y;


            pictureBox1.Padding = new Padding(0, 0, Padding.Right - dx, Padding.Bottom - dy);

            pictureBox1.Invalidate();

       }

    }

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        Dragging = false;
    }

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Я сделал это, создав панель и вставив в нее рамку с изображением. Она работает на моей стороне. Пожалуйста, найдите код.

 private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            int moveLeftRight = e.X + pictureBox1.Left - MouseDownLocation.X;
            int moveUpDown = e.Y + pictureBox1.Top - MouseDownLocation.Y;
            int panlTopLocation = panel1.Location.Y;
            int panlbottomLocation = panel1.Location.Y + panel1.Height - pictureBox1.Height;
            int panlLeftLocation = panel1.Location.X;
            int panlRightLocation = panel1.Location.X + panel1.Width - pictureBox1.Width ;

            if (panlLeftLocation < moveLeftRight)
            {
                if (panlRightLocation > moveLeftRight)
                {
                    pictureBox1.Left = moveLeftRight;
                }
                else
                {
                    pictureBox1.Left = panlRightLocation;
                }
            }
            else
            {
                pictureBox1.Left = panlLeftLocation;
            }


            if (panlTopLocation < moveUpDown)
            {
                if (panlbottomLocation > moveUpDown)
                {
                    pictureBox1.Top = moveUpDown;
                }
                else
                {
                    pictureBox1.Top = panlbottomLocation;
                }
            }
            else
            {
                pictureBox1.Top = panlTopLocation;
            }

        }
    }
0 голосов
/ 22 января 2019

Сделай это

pictureBox1.Padding = new Padding(Padding.Left + dx, Padding.Top + dy, Padding.Right - dx, Padding.Bottom - dy);

вместо этого

pictureBox1.Padding = new Padding(0, 0, Padding.Right - dx, Padding.Bottom - dy);
...