2012-11-01 5 views
1

Вот прорезь. Я нажимаю кнопку и не создаю новый PictureBox без проблем. Когда я нажимаю и перетаскиваю, я перемещаю изображение в новое место. Теперь, когда я снова нажимаю кнопку, я создаю новый экземпляр того же PictureBox, и когда я пытаюсь переместить старый, я в конечном итоге перемещаю вновь созданный ящик. Я полагаю, это связано с тем, что они оба имеют одно и то же имя:Перемещение PictureBox C#

PictureBox pic = new PictureBox(); 

Как переключаться между двумя изображениями, нажимая?

* UPDATE * Благодаря ответ Nilotpal, я уже удалось решить данную проблему. Единственное, что сейчас кажется, кажется, что изображение теперь дрожит, или переключает места назад и четвертое между другим экземпляром и тем, что я перетаскиваю. В любом случае, я действительно не уверен, как это решить. Есть идеи?

* UPDATE * код у меня есть:

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; 

    } 
+1

Можем ли мы получить больше вашего кода? Как событие или метод, который вы используете для их перемещения. – LightStriker

+0

Ответ Нилотпала - это именно то, что я ищу, за исключением того, что это действительно трясет! Но обязательно прочитайте код: – Alen

ответ

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

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

+0

Большое вам спасибо, это именно то, что я ищу. Любая идея, как решить тряску? – Alen

+1

Попробуйте это thisPB.Location = новая точка (thisPB.Left + e.X, thisPB.Top + e.Y); – nilobarp

+0

Да, я действительно дал себе идею, поскольку я редактировал вопрос выше. Я рад видеть, что сам пришел к тому же самому выводу! значит, я учусь! Тем не менее, еще раз спасибо. – Alen

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

Вы можете найти это полезным.

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); 
    } 
} 
Смежные вопросы