2013-07-28 34 views
1

我会尽量简洁但易于理解。我有图片框元素的动态2维数组,他们正在通过所有添加到相同的形式:将控件的MouseClick事件传递给它的容器

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

现在我设计一个算法,将决定这些的PBS被点击,但我已将其放置在ParentForm_MouseClick方法中。现在我已经到了一个悖论。我创建的算法返回正确的输出,但ParentForm_MouseClick方法仅在单击窗体中的空白区域时调用,而不是在单击PictureBoxes时调用。所以我的问题是 - 当用户单击窗体中的任何位置时,如何调用ParentForm_MouseClick方法,即是否可以重写PictureBoxes的MouseClick事件,以便调用ParentForm_MouseClick?

编辑:这只是发生在我,我可以创建一个自定义PictureBoxClass类,它扩展了.NET一个,只是覆盖鼠标点击()事件调用我以前写的方法?

+0

为什么不给每个图片框指定一个鼠标点击事件?那么没有任何算法,您只需使用事件的发件人 – Sayse

+0

这是最简单的方法。但我有8x8阵列,据我所知在.NET中没有一个Control.setOnClickEventMethod(),所以我必须为每一个单独实现它。 – NitroNbg

+0

您可以迭代数组并附加事件处理程序。 – keyboardP

回答

0

好像你是过于复杂的事情。如果您需要在不同地方的事件处理程序中调用代码,最好将其抽象为不同的方法。您可以将相同的事件处理程序附加到调用该方法的PictureBoxes。

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 
} 
相关问题