【问题标题】:Move PictureBox C#移动图片框 C#
【发布时间】:2012-10-22 01:29:12
【问题描述】:

这里是缝。我单击一个按钮并创建一个新的 PictureBox 没问题。当我单击并拖动时,我将图片移动到它的新位置。现在,当我再次单击该按钮时,我创建了同一个 PictureBox 的新实例,当我尝试移动旧的实例时,我最终移动了新创建的框。我认为这是因为它们都具有相同的名称:

PictureBox pic = new PictureBox();

如何通过点击在两个图片框之间切换?

*更新* 感谢 Nilotpal 的回答,我设法解决了上述问题。唯一的问题是图片框现在似乎在晃动,或者在另一个实例和我正在拖动的实例之间来回切换位置。无论哪种方式,我真的不确定如何解决这个问题。有什么想法吗?

*更新* 我的代码:

 private void code128ToolStripMenuItem_Click(object sender, EventArgs e)
    {


        bNum++;
        Barcode barcode = new Barcode();


        pic = new PictureBox();
        pic.Name = "bCode" + bNum;
        pic.SizeMode = PictureBoxSizeMode.AutoSize;
        pic.Image = barcode.createBarcode(BarcodeLib.TYPE.CODE128, 300, 100, "123456789");

        pic.Show();
        labelHolder.Controls.Add(pic);
        pic.BringToFront();
        pic.MouseDown += pic_MouseDown;
        pic.MouseMove +=pic_MouseMove;
        pic.MouseUp += pic_MouseUp;
    }



    PictureBox thisPB;
     private void pic_MouseDown(object sender, MouseEventArgs e)
    {


        mouseDown = true;

        oldX = e.X;
        oldY = e.Y;


    }


    private void pic_MouseMove(object sender, MouseEventArgs e)
    {
        if(mouseDown)
        {



                thisPB = (PictureBox)sender;
                thisPB.Location = new Point(pic.Location.X - (oldX - e.X), pic.Location.Y - (oldY - e.Y));


                this.Refresh();


        }




    }


    private void pic_MouseUp(object sender, MouseEventArgs e)
    {

        mouseDown = false;

    }

【问题讨论】:

  • 我们可以获取更多您的代码吗?比如你用来移动它们的事件或方法。
  • Nilotpal 的答案正是我想要的,除了它真的很不稳定!但确定继承人的代码:

标签: c# picturebox mousemove


【解决方案1】:
    private void button1_Click(object sender, EventArgs e)
    {
        PictureBox pb = new PictureBox();
        pb.Top = 200;
        pb.Left = 200;
        pb.BackColor = Color.Gray;
        pb.MouseMove += new MouseEventHandler(pb_MouseMove);
        this.Controls.Add(pb);
    }

    void pb_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            PictureBox thisPB = (PictureBox)sender;
            thisPB.Left = e.X;
            thisPB.Top = e.Y;
        }
    }

移动会不稳定,您可以根据需要进行更改。

【讨论】:

  • 非常感谢,这正是我要找的。知道如何解决抖动吗?
  • 试试 thisPB.Location = new Point(thisPB.Left + e.X, thisPB.Top + e.Y);
  • 是的,我在编辑上面的问题时实际上给了自己这个想法。我很高兴看到自己得出了完全相同的结论!表示我在学习!不过,再次感谢。
【解决方案2】:

修好了!

旧代码:

Barcode barcode = new Barcode();
        pic = new PictureBox();
        pic.Name = "bCode" + bNum;
        pic.SizeMode = PictureBoxSizeMode.AutoSize;
        pic.Image = barcode.createBarcode(BarcodeLib.TYPE.CODE128, 300, 100, "123456789");

        pic.Show();
        labelHolder.Controls.Add(pic);
        pic.BringToFront();
        pic.MouseDown += pic_MouseDown;
        pic.MouseMove +=pic_MouseMove;
        pic.MouseUp += pic_MouseUp;
    }

    PictureBox thisPB;
    private void pic_MouseDown(object sender, MouseEventArgs e)
    {

        mouseDown = true;

        oldX = e.X;
        oldY = e.Y; }


    private void pic_MouseMove(object sender, MouseEventArgs e)
    {
        if(mouseDown)
        {
thisPB.Location = new Point(pic.Location.X - (oldX - e.X), pic.Location.Y - (oldY - e.Y));
                this.Refresh();

        }
    }


    private void pic_MouseUp(object sender, MouseEventArgs e)
    {
        mouseDown = false;
    }

工作代码:

Barcode barcode = new Barcode();

        pic = new PictureBox();
        pic.Name = "bCode" + bNum;
        pic.SizeMode = PictureBoxSizeMode.AutoSize;
        pic.Image = barcode.createBarcode(BarcodeLib.TYPE.CODE128, 300, 100, "123456789");

        pic.Show();
        labelHolder.Controls.Add(pic);
        pic.BringToFront();
        pic.MouseDown += pic_MouseDown;
        pic.MouseMove +=pic_MouseMove;
        pic.MouseUp += pic_MouseUp;
    }


    PictureBox thisPB;
    private void pic_MouseDown(object sender, MouseEventArgs e)
    {             
        mouseDown = true;

        oldX = e.X;
        oldY = e.Y;           
    }


    private void pic_MouseMove(object sender, MouseEventArgs e)
    {
        if(mouseDown)
        {             
                thisPB = (PictureBox)sender;
                thisPB.Location = new Point(thisPB.Location.X - (oldX - e.X), thisPB.Location.Y - (oldY - e.Y));

                this.Refresh();                
        }            
    }


    private void pic_MouseUp(object sender, MouseEventArgs e)
    {
        mouseDown = false;           
    }

【讨论】:

    【解决方案3】:

    您可能会发现这很有帮助。

    static class ExtensionMethods
    {
        public static Point Add(this Point original, Point value)
        {
            return new Point(original.X + value.X, original.Y + value.Y);
        }
    
        public static Point Subtract(this Point original, Point value)
        {
            return new Point(original.X - value.X, original.Y - value.Y);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 2021-12-10
      • 1970-01-01
      • 2013-12-16
      相关资源
      最近更新 更多