¿Llamando a los eventos de C # desde fuera de la clase propietaria?
¿Es posible bajo cualquier conjunto de circunstancias poder lograr esto?
Mis circunstancias actuales son las siguientes:
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.
}
}
Mi primer pensamiento fue tener una función similar a:
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 un kludge horriblemente feo, pero debería funcionar ... ¿Pero debe haber una solución más elegante? La biblioteca .NET hace esto todo el tiempo con controladores de mensajes y eventos de llamada en el Control. ¿Alguien más tiene alguna otra / mejor idea?