将控件鼠标单击事件传递给其容器

时间:2013-07-28 10:48:08

标签: c# visual-studio mouseclick-event

我会尽量简洁但易于理解。我有一个动态的二维PictureBox元素数组,它们都通过以下方式添加到同一个表单中:

this.Controls.Add(PictureBoxArray[i,j]);

现在我设计了一种算法,可以确定点击了哪些PB,但我已将它放在ParentForm_MouseClick方法中。而现在我已经陷入了悖论。我创建的算法返回正确的输出,但只有在我单击Form中的空白空间时才会调用ParentForm_MouseClick方法,而不是在我单击PictureBoxes时。所以我的问题是 - 当用户点击表单中的任何地方时,我怎么能调用ParentForm_MouseClick方法,即我可以以某种方式覆盖PictureBoxes的MouseClick事件,以便调用ParentForm_MouseClick?

编辑:这只是发生在我身上,我可以创建一个扩展.NET的自定义PictureBoxClass类,只是覆盖MouseClick()事件来调用我之前写过的方法吗?

1 个答案:

答案 0 :(得分:0)

好像你过分复杂了。如果您需要在不同位置的事件处理程序中调用代码,最好将其抽象为不同的方法。您可以将相同的事件处理程序附加到PictureBox,然后调用该方法。

for(int i = 0; i < PictureBoxArray.GetLength(0); i++) 
{
    for(int j = 0; j < PictureBoxArray.GetLength(1); j++)
    {
        //attach handler
        PictureBoxArray[i,j].Click += pictureBox_Click;
    }
}


void pictureBox_Click(object sender, EventArgs e)
{
   MyMethod();      
}

void parentForm_Click(object sender, EventArgs e)
{
   MyMethod();       
}

private void MyMethod()
{
   //method to be called
}