Comentarios

Comprensión del parámetro remitente en controladores de eventos de Delphi

Comprensión del parámetro remitente en controladores de eventos de Delphi

Manejadores de eventos y el remitente

procedimiento TForm1.Button1Click (Remitente: TObject); empezar  … fin;Button1ClickEvento OnClick

El parámetro "Remitente" hace referencia al control que se utilizó para llamar al método. Si hace clic en el control Button1, provocando que se llame al método Button1Click, se pasa una referencia o puntero al objeto Button1 a Button1Click en el parámetro llamado Remitente.

Compartamos un poco de código

Por ejemplo, supongamos que queremos que un botón y un elemento del menú hagan lo mismo. Sería una tontería tener que escribir el mismo controlador de eventos dos veces.

Para compartir un controlador de eventos en Delphi, haga lo siguiente:

  1. Escriba el controlador de eventos para el primer objeto (por ejemplo, botón en la barra de velocidad)
  2. Seleccione el nuevo objeto u objetos: sí, pueden compartir más de dos (por ejemplo, MenuItem1)
  3. Vaya a la página Evento en el Inspector de objetos.
  4. Haga clic en la flecha hacia abajo junto al evento para abrir una lista de controladores de eventos previamente escritos. (Delphi le dará una lista de todos los controladores de eventos compatibles que existen en el formulario)
  5. Seleccione el evento de la lista desplegable. (por ejemplo, Button1Click)
Al hacer clic

procedimiento TForm1.Button1Click (Remitente: TObject); empezar   {código para un botón y un elemento de menú}  …   {algún código específico:}   Si Remitente = Botón1 luego ShowMessage ('¡Botón1 hecho clic!') si no si Remitente = MenuItem1 luego ShowMessage ('¡MenuItem1 hecho clic!') más ShowMessage ('??? clicked!'); fin;

Nota: el segundo más en la instrucción if-then-else maneja la situación cuando ni el Button1 ni el MenuItem1 han causado el evento. Pero, quién más podría llamar al controlador, podría preguntar. Pruebe esto (necesitará un segundo botón: Button2):

procedimiento TForm1.Button2Click (Remitente: TObject); empezar Botón1Haga clic en (Botón2); {esto resultará en: '??? hecho clic! '} fin;

IS y AS

Si Remitente es TButton luego    Hacer algo más    Hacer algo más;Cuadro de edición

procedimiento TForm1.Edit1Exit (remitente: TObject); empezar Botón1Haga clic en (Editar1); fin;

{... más} empezar   Si Remitente es TButton luego ShowMessage ('¡Algún otro botón activó este evento!') si no si Remitente es TEdit luego     con Remitente como TEdit hacer      empezar Texto: = 'Edit1Exit ha sucedido'; Ancho: = Ancho * 2; Altura: = Altura * 2; fin {empezar con} fin;

Conclusión

Como podemos ver, el parámetro Sender puede ser muy útil cuando se usa correctamente. Supongamos que tenemos un montón de cuadros de edición y etiquetas que comparten el mismo controlador de eventos. Si queremos saber quién activó el evento y actuar, tendremos que lidiar con las variables Object. Pero, dejemos esto para otra ocasión.