Aufrufen von C # -Ereignissen von außerhalb der besitzenden Klasse?

Ist es unter bestimmten Umständen möglich, dies zu erreichen?

Meine gegenwärtigen Umstände sind folgende:

public class CustomForm : Form
{
    public class CustomGUIElement
    {
    ...
        public event MouseEventHandler Click;
        // etc, and so forth.
    ...
    }

    private List<CustomGUIElement> _elements;

    ...

    public void CustomForm_Click(object sender, MouseEventArgs e)
    {
        // we might want to call one of the _elements[n].Click in here
        // but we can't because we aren't in the same class.
    }
}

Mein erster Gedanke war, eine ähnliche Funktion zu haben wie:

internal enum GUIElementHandlers { Click, ... }
internal void CustomGUIElement::CallHandler(GUIElementHandler h, object[] args) {
    switch (h) {
        case Click:
            this.Click(this, (EventArgs)args[0]);
            break;
        ... // etc and so forth
    }
}

Es ist ein schrecklich hässlicher Trick, aber es sollte funktionieren ... Muss es eine elegantere Lösung geben? Die .NET-Bibliothek erledigt dies ständig mit Message-Handlern und dem Aufrufen von Ereignissen in Controls. Hat jemand andere / bessere Ideen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage