EVENT_SENDER_ID en Manejador de evento


([N3] pacosatu) #1

Hola.

Acabo de descubrir algo muy útil y como muchas cosas en Velneo se descubren por el camino. No sé si esto está documentado pero en este caso ha sido una sorpresa agradable.

La variable local EVENT_SENDER_ID, cuando está definida, se rellena automáticamente con el ID del Botón que ejecuta el manejador de evento.

Así, en el manejador de evento podemos interrogar por el valor de EVENT_SENDER_ID y actuar según el botón que se haya pulsado, sin necesidad de crear una conexión de evento.

Lástima que otros controles como el “Botón de radio” no tengan la posibilidad de disparar un manejador directamente como lo hace el Botón.

Espero os sirva.
Saludos
Paco Satué


([N2] ramiro) #2

Buenas:

Muchas gracias por la info, pero no veo clara la utilidad…

¿Usar un mismo manejador de evento para las tareas a lanzar desde distintos botones?

Saludos. Ramiro


([N3] pacosatu) #3

Hola Ramiro.

Un ejemplo sencillo.
La típica barra con 24 botones con las letras del abecedario para ejecutar una búsqueda entre límites. Todos los botones llaman al mismo manejador y en el manejador ya pones un comando if

if EVENT_SENDER_ID = “CMD_A”
–set (letrainicial = “A”)
if EVENT_SENDER_ID = “CMD_B”
–set (letrainicial = “B”)

o más elegante en una sola línea
set ( letrainicial = right(EVENT_SENDER_ID, 1) )

El tema es que nos evitamos tener que crear 24 manejadores o 24 conexiones de evento. El control Botón ya genera una señal cuando se pulsa y por eso se rellena la variable EVENT_SENDER_ID.

Otra utilidad es agrupar las Acciones de Aceptar y Cancelar en un solo manejador.

Saludos
Paco Satué


([N4] velavisual) #4

Hola, para completar el post:

Salió en la versión 7.11

Nuevas variables EVENT_SENDER_ID y EVENT_SENDER_COL
Si están declaradas se llenan automáticamente:
EVENT_SENDER_ID con el identificador del control que emitió la señal.
EVENT_SENDER_COL con el identificador de la columna de la rejilla que emitió la señal.
EVENT_SENDER_ID estará vacía si el sender es el control principal (lo mismo que ocurre en la propiedad control al declarar una conexión de evento).
EVENT_SENDER_COL estará vacía en todos los eventos salvo los de columna de rejilla y la columna está siendo editada.
Las variables han de ser alfabéticas normales, no se admiten

En la documentación sobre Variables locales especiales disponemos de las distintas señales y qué es lo que devuelven en cada posición del array


([N3] pacosatu) #5

Hola Antonio.

Gracias por el aporte.
Mi descubrimiento se refiere a que con el Control Botón no es necesario definir una Conexión de evento para capturar la pulsación del ratón.

En las columnas de Rejilla y en los Botones de radio por ejemplo es necesario definir la conexión de Evento para poder leer el valor de EVENT_SENDER_ID en el manejador correspondiente ya que estos controles no pueden llamar a manejador directamente como lo hace el Botón.

Simplemente nos ahorramos código.

Saludos
Paco Satué


([N1] wikan) #6

Buenas, yo conocía esta funcionalidad.

Lo redondo sería que cuando se lanza una acción en vez de que EVENT_SENDER_ID te devuelve el formulario, que sea el ID de la acción.

O incluso mejor, si es en una menú incrustado en un edit, que devuelve el edit y en EVENT_PARAMS, que indique la acción.


([N4] velavisual) #7

@Wikan

Al foro de ideas… aquí se pierde.Allí al menos queda constancia de ello.


([N1] wikan) #8

@velavisual, tiene usted toda la razón.
Voy a comer ( me mata la parienta ya ), y lo expongo esta tarde.

Saludos


([N1] wikan) #9

He publicado la idea, a ver que les parece
https://velneo.zendesk.com/entries/72528026-Que-EVENT-SENDER-ID-indique-la-acci%C3%B3n-lanzada-y-no-el-formulario