C# 动态添加的事件处理程序不';在C语言中不能像预期的那样工作#

C# 动态添加的事件处理程序不';在C语言中不能像预期的那样工作#,c#,.net,winforms,C#,.net,Winforms,我已经为用MainForm创建的PictureBox编写了事件处理程序 pictureBox的名称为pictureBoxBackGround。 我动态添加了更多PictureBox,并将它们的事件处理程序与pictureBoxBackGround的事件处理程序相关联,因为我希望它们的行为方式相同。 当我移动pictureBoxBackGround时,事件处理程序工作正常,但它们不能与新的PictureBox一起正常工作 以下是事件处理程序: private void pictureBoxBac

我已经为用MainForm创建的
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;