https://foro.gambas-es.org/viewtopic.php?f=1&t=3047
-----------------------------------
obedlink
Martes, 09 Abril 2013, 00:30

Evitar La Ejecución De Una Función
-----------------------------------
hola

pongamos este ejemplo:

Public sub btnsalir_click()
codigo1
end

Public sub Form_Close()
codigo1
end

si salimos de la aplicación con el boton X de la parte superior derecha el programa ejecuta el codigo y luego se cierra, hasta aquí todo normal, el problema es con el boton Salir, a precionarlo hace ejecuta su codigo pero como a la vez se esta cerrando la aplicacion tambien se ejecuta el codigo del Form_Close.

por eso pregunto: si salgo de la aplicacion con el boton Salir como haga para que el codigo Form_Close no se ejecute.


-----------------------------------
jguardon
Martes, 09 Abril 2013, 01:33

Re: Evitar La Ejecución De Una Función
-----------------------------------
Hola

Primero hay que saber qué código se ejecuta en cada evento. [u]El código del evento form_close se ejecuta siempre[/u], por lo que tendrás que decidir qué es lo que quieres hacer en cada caso. Usando la instrucción Stop Event lo que haces es inhibir el evento, por lo que si lo pones en el botón click con un condicional podrás controlar mejor lo que hagas. Con un ejemplo lo verás mejor:

[code linenumbers=false syntax=gambas]
Private flag As Boolean

Public Sub Button1_Click()
    flag = True
    Me.Close
End

Public Sub Form_Close()
    If flag Then
        Stop Event
        Print "no se puede cerrar desde el botón"
        flag = False 'restauramos el flag a false para que podamos cerrar desde la X
    Endif
End[/code]

Si desde cualquier otra parte del formulario volvemos a poner flag = false, entonces el botón cerrará el formulario.

Ahora es cuestión de que apliques tu propia lógica, 

saludos.


-----------------------------------
shordi
Martes, 09 Abril 2013, 09:18

Re: Evitar La Ejecución De Una Función
-----------------------------------
Yo añadiría que eso es un error de concepto. "Haz las cosas una sola vez". 

-¿El botón salir cierra el formulario? pues entonces no debería ejecutar la función. 
-¿El formulario puede ser cerrado sin tener que ejecutar la función? Entonces el evento Close no debería ejecutarla

La manera clásica de controlar estas cosas son los flags, que tan conejudamente te ha descrito Jesús. Pero hay otras formas y "El conceto es el conceto", que decía el de "Airbag"....


-----------------------------------
obedlink
Martes, 09 Abril 2013, 17:54

Re: Evitar La Ejecución De Una Función
-----------------------------------
que cabezón soy el comando "Stop Event" no es necesario con la variables boolean es suficiente
gracias por la ayuda chicos.

no se si puedo aprovechar el post o hacer otro, pero al crear el paquete de instalación de mi aplicacion como le digo a Gambas que el acceso directo a mi aplicación se ejecute con kdesudo ejemplo: "kdesudo app-gambas"


-----------------------------------
shordi
Martes, 09 Abril 2013, 21:28

Re: Evitar La Ejecución De Una Función
-----------------------------------
Mejor crea un hilo nuevo, que este no tiene nada que ver con el sudo y derivados.


