La Web del Programador: Comunidad de Programadores
 
    Pregunta:  60951 - DETENER UN EVENTRO CREADO POR USUARIO SIN PASAR A OTRO
Autor:  Cesar Vidarte
Hola buenas tardes con todos, estoy desarrollando en PB 10.5, para un proyecto pequeño estoy usando como base de datos Access, y tengo en un formulario un boton que es guardar, adicional a eso he creado dos eventos (ue_validar y ue_grabar) a los que llamo en el evento click de un botón

THIS.TriggerEvent("ue_validar") ;
THIS.TriggerEvent("ue_guardar")

Mi pregunta es como hacer para que cuando no se cumpla una condición del evento ue_validar el programa deje de ejecutar código, es decir haga una pequeña pausa.

Dentro del ue_validar, hago verificación de los campos, como por ejemplo esta parte del código. Pero cuando uso el return no para el programa, sino que ejecuta el siguiente evento que es ue_guardar

IF IsNull(is_nomb_lugar) = TRUE or Len(Trim(is_nomb_lugar)) = 0 THEN
Messagebox('Control de Errores','No ha Ingresado el nombre del Lugar')
tab_proceso.tabpage_detalle.dw_detalle.setfocus()
tab_proceso.tabpage_detalle.dw_detalle.setcolumn("nomb_lugar")
RETURN ;
END IF

¿Como hacer para que no se ejecute el siguiente evento al momento de dar clic en el boton guardar si es que en el primero no cumplio alguna condición?

  Respuesta:  Carlos Martin
Cuando se crean los eventos nuevos, debes poner en la definición del evento que retorne un valor de tipo integer en la opción "Return Type".

Cuando ejecutes la instrucción Return en el evento si todo va bien le pones "Return 1" si algo va mal le pones "Return -1", y cuando haces la llamada lo haces de la siguiente forma " li_return = THIS.TriggerEvent("ue_validar") ", de esta forma al salir del evento recibes el valor de 1 si tida va bien y -1 si hay un error.

Antes de hacer la llamada al segundo evento preguntas si li_return es 1 y en caso negativo no lanzas el segundo.

ejemplo:
integer li_return
li_return = THIS.TriggerEvent("ue_validar")
if li_return = 1 then
THIS.TriggerEvent("ue_guardar")
end if