«Указатель на функцию» представлен типом делегата в C #. Событие Click
ожидает делегата типа EventHandler
. Таким образом, вы можете просто передать EventHandler
методу RegisterFunction и зарегистрировать его для каждого события Click:
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
}