[英]Move PictureBox C#
這是女巫。 我單擊一個按鈕並創建一個新的PictureBox沒問題。 單擊並拖動時,將圖片移動到新位置。 現在,當我再次單擊該按鈕時,將創建同一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;
}
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.