Переместить PictureBox C#

Вот ситч. Я нажимаю кнопку и создаю новый 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;

    }

3 ответа

Решение
    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;
        }
    }

Движение будет шатким, вы можете изменить его в соответствии с вашими потребностями.

Починил это!

Старый код:

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);
    }
}
Другие вопросы по тегам