# Pestañas, OnHide, no salir

**URL:** <https://foros.velneo.com/t/pestanas-onhide-no-salir/8775>\
**Category:** Velneo\
**Created:** [21 Marzo, 2016 12:33 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775 "2016-03-21T12:33:35Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![victorgt1](https://avatars.discourse-cdn.com/v4/letter/v/4491bb/32.png) [@victorgt1](https://foros.velneo.com/u/victorgt1)\
**Post date:** [21 Marzo, 2016 12:33 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775/1 "2016-03-21T12:33:35Z")

</div>

Hola. Una de separadores de pestañas…

Tengo un separador de formularios. En el form 2º, al pasar al siguiente (o sea, al ocultarlo, señal OnHide) disparo un evento que controla ciertos errores (en concreto, que algunos campos no esten vacios). Si estan vacios, aviso con un mensaje…

Y ME GUSTARIA DEJAR LA MISMA PESTAÑA ACTIVA… pero ni pa tras…

He creado un evento en el subformulario llamado JS\_ANTERIOR:  
_var miSep = theRoot.dataView().mainForm().control(“SEP\_MAIN”);  
miSep.setCurrentIndex(miSep.currentIndex-1);  
theRoot.dataView().updateControls();  
theApp.processEvents();_

Y justo al final de mi evento OnHide (codigo Velneo), llamo a JS\_ANTERIOR  
si hay errores para “volver” al 2º form, pero no funciona.

Me hace una cosa bastante rara: **pone la pestaña 2º como activa (blanca) pero  
muestra el contenido del 3er form. O sea, no va…**

Seguro que es facil y yo estoy muy torpe, pero no caigo…

¿Alguna forma de hacer esto? O similares…  
Controlar que no cambie de pestaña si encontramos errores en el evento onHide.  
Tambien me valdria una forma de establecer una pestaña por posicion (o por nombre),  
pero debe funcionar en un evento disparado con OnHide.

Saludos y gracias.

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [21 Marzo, 2016 12:42 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775/2 "2016-03-21T12:42:13Z")

</div>

Buenas, ¿has probado con set retorno NO?

---

<div class="post-metadata">

**Author:** ![victorgt1](https://avatars.discourse-cdn.com/v4/letter/v/4491bb/32.png) [@victorgt1](https://foros.velneo.com/u/victorgt1)\
**Post date:** [21 Marzo, 2016 13:06 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775/3 "2016-03-21T13:06:15Z")

</div>

No, pero acabo de hacerlo. “Set retorno = NO” aparentemente no hace nada, me pasa a la tercera pestaña sin mas  
(pestaña correcta y contenido correcto).

¿Alguna idea mas?

Saludos.

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [21 Marzo, 2016 18:35 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775/4 "2016-03-21T18:35:38Z")

</div>

Hola victorgt.

Por construcción, el evento ON\_HIDE se produce después de haber ocultado el formulario y cuando ya hemos activado otro formulario del Separador. Tendría que existir un evento PRE\_ON\_HIDE para conseguir el efecto que quieres.

En estos casos yo recurro a la socorrida “chapucilla” de forzar un evento a nuestro gusto. Uso para ello el evento Timer del formulario principal.

Procede de la siguiente manera:

- En el evento ON\_HIDE del formulario de la pestaña llama al manejador JS\_ANTERIOR tal como lo haces ahora
- En el manejador javascript JS\_ANTERIOR escribes una sola linea theRoot.dataView().mainForm().startTimer(100)
- En el evento TIMER del formulario principal escribes  
Interfaz: Ejecutar manejador de evento(PARA\_TIMER\_JS) // ejecuta un theRoot.dataView().stopTimer()  
Interfaz: Activar subcontrol del contenedor de formularios(SEP\_MAIN, \<\<pestaña\>\>)

LLega a verse el subformulario que has activado por un instante con un efecto visual algo desconcertante, pero se consigue el efecto deseado.

Pruébalo.  
Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![victorgt1](https://avatars.discourse-cdn.com/v4/letter/v/4491bb/32.png) [@victorgt1](https://foros.velneo.com/u/victorgt1)\
**Post date:** [22 Marzo, 2016 09:02 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775/5 "2016-03-22T09:02:06Z")

</div>

Gracias por las explicaciones, Paco. Clarificadoras y didacticas como siempre.

Respecto a tu solucion, bueno, en mi manual personal “Cosas que un programador no  
debe hacer si no quiere meterse en lios”, el uso de Timers esta en 1ª posicion.

De todas formas, lo probare, el que tenga un pequeño defecto estetico no me preocupa,  
es una situacion de error que se supone sera poco frecuente.

Ademas, por lo que entiendo, el Timer no lo usas como tal, sino para disparar una sola  
ejecucion del evento. Lo usas como un atajo para disparar el evento del Timer del  
formulario principal desde cualquier subformulario en cualquier momento.

Saludos y gracias.

---

<div class="post-metadata">

**Author:** ![josemp](https://avatars.discourse-cdn.com/v4/letter/j/a698b9/32.png) [@josemp](https://foros.velneo.com/u/josemp)\
**Post date:** [30 Marzo, 2016 12:20 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775/6 "2016-03-30T12:20:45Z")

</div>

Hola seh,

Cuando dices que deberia existir un evento PRE\_ON\_HIDE, en realidad, ya existe y se llama ON\_SHOW.  
Lo que quiero decir, es que bastaria con guardar en ID del formulario o pestaña actual en el ON\_SHOW, para luego poder recuperarlo en el ON\_HIDE y saber a que pestaña debemos volver.  
En realidad no lo he probado y no se si funcionará, pero prueba y nos informas y de paso, si victorgt nos documenta el resultado, te estaremos agradecidos.

saludos.

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [30 Marzo, 2016 13:56 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775/7 "2016-03-30T13:56:14Z")

</div>

Hola josemp.

El problema no es saber a qué pestaña (formulario) tenemos que volver, el problema es que desde el evento ON\_HIDE no funciona el comando para activar la pestaña a la que queremos regresar -\>\> miSep.setCurrentIndex(miSep.currentIndex-1).

De todas formas, seguro que habrá otras formas de hacerlo.

Saludos.  
Paco Satué

---

<div class="post-metadata">

**Author:** ![victorgt1](https://avatars.discourse-cdn.com/v4/letter/v/4491bb/32.png) [@victorgt1](https://foros.velneo.com/u/victorgt1)\
**Post date:** [31 Marzo, 2016 16:14 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775/8 "2016-03-31T16:14:43Z")

</div>

Hola. Sigo por aqui…

La solucion de Paco no he conseguido hacerla funcionar, seguramente porque tengo una “guarreria”  
de eventos en ese formulario de campeonato. Parecia que tenia algun problema de estilo recursivo  
y me hacia cosas realmente raras (saltarme de la 4 a la primera, pasando por la 3 y por la 2).  
Talmente parecia que se me lanzaban eventos en cascada… Tampoco investigue mucho mas porque…

Hoy mismo he puesto una consulta a soporte sobre esto, que para eso esta.  
No vaya a ser que sea mas facil de lo que pensamos (lease virgueria JS).

Saludos.

---

<div class="post-metadata">

**Author:** ![victorgt1](https://avatars.discourse-cdn.com/v4/letter/v/4491bb/32.png) [@victorgt1](https://foros.velneo.com/u/victorgt1)\
**Post date:** [1 Abril, 2016 07:40 UTC](https://foros.velneo.com/t/pestanas-onhide-no-salir/8775/9 "2016-04-01T07:40:19Z")

</div>

La solución de soporte es usar un objeto “pila de formularios”. En fin… lo de siempre…

Saludos.
