Comunidad Gambas-es
Stop Event ó Return - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Stop Event ó Return (/thread-1840.html)



Stop Event ó Return - Shell - 14-01-2025

Buenas!.

El efecto que hace es el mismo en esta situación.

Cada vez que se hace clic en el botón la cantidad de cuenta aumenta.
Cuando esta supera dos, el evento se cancela o por lo menos se sale del proceso mediante Return sin devolver ningún valor.

En Gambas no existe Exit Sub, por eso lo de sustituirlo con Return.

Código:
Private cuenta As Integer

Public Sub Form_Open()

  Me.Title = "El valor de cuenta es:  " & Str(cuenta)

End

Public Sub Button1_Click()

  cuenta += 1
  If cuenta > 2 Then Return
  Me.Title = "El valor de cuenta es: " & Str(cuenta)

End

¿ Qué opinan ?.


Fijaros en esta situación:

Tenemos este procedimiento. Escribo la parte que interesa.

Código:
Public Sub Botones_Click()

  vecesmostrar += 1

....
  If vecesmostrar > 2 Then
    Label1.Text = "El número que has elegido es: " & Str(anumeros[10])
    Stop Event
  Endif

  'Mostramos el nuevo orden de los números en los listboxes
  MostrarEnListBoxes(anumeros)

End
Si sustituyo la instrucción Stop Event por Return, se sale inmediatamente del evento, en cambio si uso Stop Event, se sale
de la condicional y ejecuta la instrucción inferior. 

¿ No debería Stop Event haber salido del evento sin continuar con las instrucciones inferiores ?

Saludos


RE: Stop Event ó Return - omoreno - 14-01-2025

[quote pid="9162" dateline="1736859902"]
¿ No debería Stop Event haber salido del evento sin continuar con las instrucciones inferiores ?
[/quote]

Hola Shell

En la ayuda de gambas se dice:

"Solo se pueden cancelar algunos eventos nativos. Esto tiene como objetivo principal permitirle reemplazar el comportamiento predeterminado del teclado y el mouse por un comportamiento diferente de su elección."

 Saludos.


RE: Stop Event ó Return - Harpo - 14-01-2025

Stop Event evita la "propagación" del evento, no termina la ejecución del procedimiento, el código siguiente a la instrucción se ejecuta. Esta instrucción hace que el código interno del control no se ejecute.
Return termina el procedimiento y no ejecuta las instrucciones siguientes, pero el evento interno del control se ejecuta.

Un ejemplo:
Código:
Public Sub Form_Close()
    ' Se cancela la ejecucion del evento Close interno del formulario y nunca se cierra.
    Stop Event

   ' El codigo situado aquí se ejecuta.
End

Public Sub Form_Close()
   ' Se termina ejecucion del evento y ejecuta el evento Close interno del formulario, cerrandose este.
   Return

  'El codigo situado aquí no se ejecuta
End

Un saludo, Harpo.


RE: Stop Event ó Return - Shell - 14-01-2025

Gracias a los dos.

Pensaba que al cancelar el evento, el código inferior a esa instrucción no se iba a ejecutar, son cosas distintas, claro.


RE: Stop Event ó Return - Shordi - 16-01-2025

(14-01-2025, 15:05)Shell escribió: Buenas!.

...
...
Si sustituyo la instrucción Stop Event por Return, se sale inmediatamente del evento, en cambio si uso Stop Event, se sale
de la condicional y ejecuta la instrucción inferior. 

¿ No debería Stop Event haber salido del evento sin continuar con las instrucciones inferiores ?

Saludos

Stop Event no es lo mismo que Return. Ya sabes que en Gambas los eventos se transmiten en la jerarquía de controles de arriba a abajo. Es decir al pulsar una tecla primero se evalúa el Form_Keypress y luego el, por ejemplo, TextBox_KeyPress. Estos controles tienen un evento de ese tipo y sólo si no hemos definido nada, se ejecuta el evento por defecto y luego se propaga hacia abajo. Así, si por ejemplo no quieres que aparezca la ñ en ningún textbox, puedes en Form_keypress preguntar por el key.code = key["ñ] (escribo de memoria) y si se cumple STOP EVENT evitará tener que comprobarlo en los textbox uno a uno.
Return, por su parte, sólo finaliza el evento que hayamos declarado.

Saludos


RE: Stop Event ó Return - Shell - 16-01-2025

Así es Shordi. Al pensar que se paraba el evento, creía que se paraba todo el proceso.
Return en mi caso no me interesaba.