我有一个包含20个PictureBox控件的Panel.如果用户点击任何控件,我希望调用Panel中的方法. 我该怎么做呢? public class MyPanel : Panel{ public MyPanel() { for(int i = 0; i 20; i++) { Controls.Add(new PictureBox(
我该怎么做呢?
public class MyPanel : Panel
{
public MyPanel()
{
for(int i = 0; i < 20; i++)
{
Controls.Add(new PictureBox());
}
}
// DOESN'T WORK.
// function to register functions to be called if the pictureboxes are clicked.
public void RegisterFunction( <function pointer> func )
{
foreach ( Control c in Controls )
{
c.Click += new EventHandler( func );
}
}
}
我如何实现RegisterFunction()?
此外,如果有很酷的C#功能可以使代码更优雅,请分享.
public void RegisterFunction(EventHandler func)
{
foreach (Control c in Controls)
{
c.Click += func;
}
}
用法:
public MyPanel()
{
for (int i = 0; i < 20; i++)
{
Controls.Add(new PictureBox());
}
RegisterFunction(MyHandler);
}
请注意,这会将EventHandler委托添加到每个控件,而不仅仅是PictureBox控件(如果还有其他控件).更好的方法是在创建PictureBox控件时添加事件处理程序:
public MyPanel()
{
for (int i = 0; i < 20; i++)
{
PictureBox p = new PictureBox();
p.Click += MyHandler;
Controls.Add(p);
}
}
EventHandler委托指向的方法如下所示:
private void MyHandler(object sender, EventArgs e)
{
// this is called when one of the PictureBox controls is clicked
}
