remove example event custom attach and c# windows events

example - Controladores de eventos C#



subscribe event handler c# (4)

¿Cómo puedo verificar C # si el botón. El evento Click tiene algún manejador asociado? If (button.Click! = Null) arroja error de compilación.


Creo que puedes si estás en la clase que plantea el evento.

Puede definir el controlador y enumerar cada uno.

por ejemplo, si su evento se define como

event System.EventHandler NewEvent;

Luego, en el método de evento raise que podrías crear, puedes hacer ...

EventHandler handler = NewEvent; if(handler != null) { handler(this, e); }

Eso le dará el controlador y de eso puede obtener la Lista de Invocación.


¿Por qué necesitas esto? ¿Cuál es el contexto? Tal vez hay una mejor manera de lograr el resultado
El botón es un objeto externo y lo que intenta hacer es verificar su lista interna de suscriptores sin preguntarlo. Está violando la encapsulación ...
Siempre debe dejar que el objeto administre los suscriptores para los eventos que expone. Si quería que los clientes lo supieran, habría expuesto un método HasClientsRegistered. No entres en


EventDescriptor e = TypeDescriptor.GetEvents (yourObject) .Find ("yourEventName", verdadero);


No puedes. Los eventos solo exponen "agregar un controlador" y "eliminar un controlador": eso es todo. (De hecho, en el CLR también puede tener metadatos para asociar un método con "desencadenar el evento", pero el compilador de C # nunca lo genera). Algunos editores de eventos pueden ofrecer medios adicionales para verificar si hay suscriptores o no. ves esos suscriptores) pero no es parte del patrón del evento en sí.

Vea mi artículo sobre eventos para más información, o mire la etiqueta de eventos (que estoy a punto de agregar a esta pregunta).