移动图片框C#

移动图片框C#,c#,picturebox,mousemove,C#,Picturebox,Mousemove,这是西斯。我点击一个按钮并创建一个新的PictureBox没有问题。单击并拖动时,我会将图片移动到新位置。现在,当我再次单击按钮时,我创建了同一PictureBox的新实例,当我尝试移动旧实例时,我最终移动了新创建的框。我认为这是因为他们都有相同的名字: PictureBox pic = new PictureBox(); 如何通过单击在两个图片框之间切换 *更新* 多亏了尼洛帕尔的回答,我成功地解决了上述问题。唯一的问题是picturebox现在似乎在抖动,或者在另一个实例和我正在拖动的实例

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

PictureBox pic = new PictureBox();
如何通过单击在两个图片框之间切换

*更新* 多亏了尼洛帕尔的回答,我成功地解决了上述问题。唯一的问题是picturebox现在似乎在抖动,或者在另一个实例和我正在拖动的实例之间来回切换位置和第四个。不管怎样,我真的不确定如何解决这个问题。有什么想法吗

*更新* 我的守则如下:

 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;

    }
移动将是不稳定的,你可以根据需要改变它

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

修复了它

旧代码:

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;           
    }
修好了

旧代码:

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

你会发现这很有帮助

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

你会发现这很有帮助

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

我们能得到更多你的代码吗?就像你用来移动它们的事件或方法。尼洛帕尔的答案正是我想要的,只是它真的很震撼!但代码确实是这样的:我们能得到更多的代码吗?就像你用来移动它们的事件或方法。尼洛帕尔的答案正是我想要的,只是它真的很震撼!当然,代码是这样的:非常感谢,这正是我想要的。知道如何解决震动吗?试试这个thisPB.Location=新点(thisPB.Left+e.X,thisPB.Top+e.Y);是的,当我编辑上面的问题时,我实际上给了自己这个想法。。我很高兴看到我自己也得出了完全相同的结论!意思是我在学习!不过,再次感谢。非常感谢,这正是我想要的。知道如何解决震动吗?试试这个thisPB.Location=新点(thisPB.Left+e.X,thisPB.Top+e.Y);是的,当我编辑上面的问题时,我实际上给了自己这个想法。。我很高兴看到我自己也得出了完全相同的结论!意思是我在学习!不过,再次感谢你。