C# 动态添加的事件处理程序不';在C语言中不能像预期的那样工作#
我已经为用MainForm创建的C# 动态添加的事件处理程序不';在C语言中不能像预期的那样工作#,c#,.net,winforms,C#,.net,Winforms,我已经为用MainForm创建的PictureBox编写了事件处理程序 pictureBox的名称为pictureBoxBackGround。 我动态添加了更多PictureBox,并将它们的事件处理程序与pictureBoxBackGround的事件处理程序相关联,因为我希望它们的行为方式相同。 当我移动pictureBoxBackGround时,事件处理程序工作正常,但它们不能与新的PictureBox一起正常工作 以下是事件处理程序: private void pictureBoxBac
PictureBox
编写了事件处理程序
pictureBox的名称为pictureBoxBackGround
。
我动态添加了更多PictureBox,并将它们的事件处理程序与pictureBoxBackGround
的事件处理程序相关联,因为我希望它们的行为方式相同。
当我移动pictureBoxBackGround
时,事件处理程序工作正常,但它们不能与新的PictureBox一起正常工作
以下是事件处理程序:
private void pictureBoxBackGround_MouseDown(object sender, MouseEventArgs e)
{
//Begin Move
m_pointLastMousePos = Cursor.Position;
m_bIsPictureBeingMoved = true;
}
private void pictureBoxBackGround_MouseUp(object sender, MouseEventArgs e)
{
//End Move
m_bIsPictureBeingMoved = false;
}
private void pictureBoxBackGround_MouseMove(object sender, MouseEventArgs e)
{
if(m_bIsPictureBeingMoved == true)
{
PictureBox picboxSelected = sender as PictureBox;
int nHorizontalChange = Cursor.Position.X - m_pointLastMousePos.X;
int nVerticalChange = Cursor.Position.Y - m_pointLastMousePos.Y;
Point pointNewImagePosition = pictureBoxBackGround.Location;
pointNewImagePosition.X = pointNewImagePosition.X + nHorizontalChange;
pointNewImagePosition.Y = pointNewImagePosition.Y + nVerticalChange;
if (pointNewImagePosition.X > 0 &&
pointNewImagePosition.Y > 0)
{
picboxSelected.Location = pointNewImagePosition;
m_pointLastMousePos = Cursor.Position;
}
}
}
我是这样附加它们的:
picBox.MouseDown += new MouseEventHandler(this.pictureBoxBackGround_MouseDown);
picBox.MouseUp += new MouseEventHandler(this.pictureBoxBackGround_MouseUp);
picBox.MouseMove += new MouseEventHandler(this.pictureBoxBackGround_MouseMove);
这是因为您仍在事件中使用原始picturebox,例如,这一行:
Point pointNewImagePosition = pictureBoxBackGround.Location;
您需要确保事件中对picturebox的所有引用都指向发送方,而不是pictureBoxBackGround
。所以这条线应该是:
Point pointNewImagePosition = picboxSelected.Location;