【问题标题】:How do I move the Image inside the picturebox?如何在图片框中移动图像?
【发布时间】:2019-06-15 18:52:12
【问题描述】:

我想要一个图像在图片框内移动。你应该不可能把它拖出来。我找到了 Padding 的答案并尝试了它,但它向相反的方向拖动。所以我尝试用 Right 和 Down 切换它,但它没有被拖拽。我还找到了一个答案,其中图片框被移动但随后它可以被移出表单并且不再存在。所以我需要一些可以将图片移动到图片框内的东西,或者可以移动图片框但不能移出表格的东西。

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

【问题讨论】:

  • 请查看我的回答
  • 问题不清楚。请详细说明要求和预期行为。

标签: c# winforms padding picturebox


【解决方案1】:

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

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

        }
    }

【讨论】:

  • 我已经用过别的东西了,但还是谢谢。我的想法只是移动面板而不是现在移动带有碰撞框的图片框
【解决方案2】:

这样做

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

【讨论】:

  • 如果你这样做 pictureBox1.Padding = new Padding(Padding.Left + dx, Padding.Top + dy, Padding.Right - dx, Padding.Bottom - dy);它变慢了。但问题是它仍然向下移动。如果我想向左移动它会,但如果我尝试向右拖动它不会
  • 好吧,实际上应该怎么做。它工作正常。你的意思是,不能将框外的图片移到顶部和左侧?
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
相关资源
最近更新 更多