Um ein Ereignis für jedes Formular im Projekt zu registrieren, müssen Instanzen der Formulare erstellt werden. Dann müssen Sie dem Load-Ereignis jeder Formularinstanz einen Delegaten zuweisen.
Das Zuweisen des Load-Ereignisses zum Typ selbst ist nicht möglich. Eine Instanz des Typs muss den Handler dem Load-Ereignis zuweisen. Ein Teil des Codes könnte im Konstruktor enthalten sein, um das Ladeereignis jedes Mal zu registrieren, wenn eine Formularinstanz erstellt wird.
Hier ist ein Code-Snippet eines Projekts, das 3 Formularklassen enthält (Form1 (Startformular), 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
}
}
Nebenbei bemerkt, können Sie jede Assembly geladen in die AppDomain erfassen, indem Sie in diesem Fall Einhaken http://msdn.microsoft.com/en-us/library/system. appdomain.assemblyload.aspx – Tom