C# 引用多个实例化的pictureboxes
我对C#很陌生,但如果我的语法不准确,请耐心学习。我可以用一个按钮创建一个picturebox,它会出现在屏幕上。然后我可以用鼠标下/鼠标移动功能在屏幕上移动它。然后,我点击按钮实例化另一个要创建的picturebox,并可以移动该picturebox,但当我尝试移动第一个picturebox时,第二个picturebox反而会移动,并变得疯狂。有没有一种方法可以在实例化时引用或标记这些框,以便当我单击其中任何一个框时,可以在屏幕上移动它们C# 引用多个实例化的pictureboxes,c#,winforms,mouseevent,picturebox,eventargs,C#,Winforms,Mouseevent,Picturebox,Eventargs,我对C#很陌生,但如果我的语法不准确,请耐心学习。我可以用一个按钮创建一个picturebox,它会出现在屏幕上。然后我可以用鼠标下/鼠标移动功能在屏幕上移动它。然后,我点击按钮实例化另一个要创建的picturebox,并可以移动该picturebox,但当我尝试移动第一个picturebox时,第二个picturebox反而会移动,并变得疯狂。有没有一种方法可以在实例化时引用或标记这些框,以便当我单击其中任何一个框时,可以在屏幕上移动它们 public partial class Form1
public partial class Form1 : Form
{
Point MP;
private static Control PB;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int picSizeX = Properties.Resources.police.Width / 3;
int picSizeY = Properties.Resources.police.Height / 3;
PictureBox pb = new PictureBox();
pb.Location = new Point(100, 100);
pb.Size = new Size(picSizeX, picSizeY);
pb.Image = new Bitmap(Properties.Resources.police);
pb.SizeMode = PictureBoxSizeMode.StretchImage;
Controls.Add(pb);
pb.Tag = "veh";
PB = pb;
pb.MouseDown += Pb_MouseDown;
pb.MouseMove += Pb_MouseMove;
pb.MouseHover += Pb_MouseHover;
}
private void Pb_MouseHover(object sender, EventArgs e)
{
PB.MouseHover += PB_MouseHover;
}
private void PB_MouseHover(object sender, EventArgs e)
{
}
private void Pb_MouseDown(object sender, MouseEventArgs e)
{
MP = e.Location;
}
private void Pb_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
PB.Left = e.X + PB.Left - MP.X;
PB.Top = e.Y + PB.Top - MP.Y;
}
}
}
实际上,不需要在类级别进行控制 在event方法中,有一个名为
对象发送方
的参数,其中包含对引发事件的控件/对象的引用
Point MP;
//private Control PB; //commented out as it is not required
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int picSizeX = Properties.Resources.police.Width / 3;
int picSizeY = Properties.Resources.police.Height / 3;
PictureBox pb = new PictureBox();
pb.Location = new Point(100, 100);
pb.Size = new Size(picSizeX, picSizeY);
pb.Image = new Bitmap(Properties.Resources.police);
pb.SizeMode = PictureBoxSizeMode.StretchImage;
Controls.Add(pb);
pb.Tag = "veh";
//PB = pb;
pb.MouseDown += Pb_MouseDown;
pb.MouseMove += Pb_MouseMove;
pb.MouseHover += Pb_MouseHover;
}
private void Pb_MouseHover(object sender, EventArgs e)
{
Control pbObj = sender as PictureBox; //sender refers to control that raised the event
pbObj.MouseHover += PB_MouseHover;
}
private void PB_MouseHover(object sender, EventArgs e)
{
}
private void Pb_MouseDown(object sender, MouseEventArgs e)
{
MP = e.Location;
}
private void Pb_MouseMove(object sender, MouseEventArgs e)
{
Control pbObj = sender as PictureBox; //sender refers to control that raised the event
if (e.Button == MouseButtons.Left)
{
pbObj.Left = e.X + pbObj.Left - MP.X;
pbObj.Top = e.Y + pbObj.Top - MP.Y;
}
}
我想我在你写这篇文章的时候把代码放在了编辑栏里。抱歉。为什么要将
静态控件保留在类级别?这是我试图弄明白时留下的垃圾。我想我在发帖前已经把它擦掉了。我可以吻你。这正是我一直在寻找的答案。为了理解它,我还有更多的学习要做,但它是有效的,我很高兴。非常感谢。