Чтобы зарегистрировать событие для каждой формы в проекте, потребуется наличие экземпляров созданных форм. Затем вам нужно назначить делегата для события Load каждого экземпляра формы.
Назначение события Load для самого типа невозможно, требуется экземпляр типа, чтобы назначить обработчик для события Load. Часть кода может быть включена в конструктор для регистрации события загрузки каждый раз, когда создается экземпляр формы.
Вот фрагмент кода проекта, содержащего 3 класса форм (Form1 (форма запуска), Form2, Form3).
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
LoadEventRegister loadEventRegister = new LoadEventRegister();
Form[] formInstances = new Form[] {new Form2(), new Form3()};
loadEventRegister.RegisterLoadOnForms(formInstances);
foreach (Form formInstance in formInstances)
{
formInstance.Show();
}
}
}
public class LoadEventRegister
{
public void RegisterLoadOnForms(IEnumerable<Form> formInstances)
{
foreach (Form formInstance in formInstances)
{
EventInfo eventInfo = formInstance.GetType().GetEvent("Load");
Type eventHandlerType = eventInfo.EventHandlerType;
MethodInfo eventHandler = this.GetType().GetMethod("Generic_Load");
Delegate d = Delegate.CreateDelegate(eventHandlerType, this, eventHandler);
eventInfo.AddEventHandler(formInstance, d);
}
}
public void Generic_Load(object sender, EventArgs e)
{
MyCustomLoad();
}
private void MyCustomLoad()
{
// Do something
}
}