如何在图片框内移动图像?

时间:2019-01-22 10:15:38

标签: c# winforms padding picturebox

我希望图像在图片框内移动。您应该不可能将其拖出。我用填充找到了答案,并尝试了一下,但它朝相反的方向拖动。因此,我尝试使用“向右”和“向下”切换它,但是并没有被拖动。我也找到了一个答案,图片框被移动了,但是可以将其移出窗体,并且不再存在。因此,我需要一些可以仅将图片移动到图片框内的东西,或者可以将图片框移动但不能移出表格的东西。

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 :(得分:0)

这样做

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);

答案 1 :(得分:0)

我通过创建一个面板并在其中插入图像框来完成它。它在我的身边工作。请查找代码打击。

 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;
            }

        }
    }