FoxPro/Visual FoxPro - formset modal, comportamiento inesperado

 
Vista:

formset modal, comportamiento inesperado

Publicado por Luighi (105 intervenciones) el 24/03/2010 23:17:17
tengo el siguiente caso:

tengo un formset modal que contiene al form1, al form2 y al form3
todos los valores del formset así como los formularios que contiene están predeterminados
es decir, por ejemplo:
todos son visibles, todos tienen la propiedad enabled a verdadero y etc
excepto que al formset se le cambio a modal

el form1 contiene dos botones de comando
siendo el nombre del botón y el evento click como siguen:

cmdActivarForm2
thisformset.form2.show

cmdActivarForm3
thisformset.form3.show

el form2 contiene dos botones de comando
siendo el nombre del botón y el evento click como siguen:

cmdActivarForm1
thisformset.form1.show

cmdActivarForm3
thisformset.form3.show

el form3 contiene dos botones de comando
siendo el nombre del botón y el evento click como siguen:

cmdActivarForm1
thisformset.form1.show

cmdActivarForm2
thisformset.form2.show

ahora bien esta es la pregunta:

cuando presiono cmdActivarForm2 del form1, el form2 se activa
luego hago click sobre el form1 y vuelvo a hacer click en el mismo botón
y el form2 ya no se activa

PORQUE?

y lo mismo sucede si elijo cualquier otro botón

siendo así:

cuáles son las reglas a tener en cuenta cuando se programan conjuntos de formularios modales?
cómo se desencadenan los eventos de un formset y en qué orden?
qué cosas que no vemos suceden?
alguien tiene algunos ejemplos a seguir?

gracias por sus comentarios de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:formset modal, comportamiento inesperado

Publicado por xx (378 intervenciones) el 25/03/2010 13:44:39
Lo mejor que puedes hacer es depurarlo mediante la colocación de mensajitos wait ... windows dentro de los distintos eventos y metodos, una solución mas elegante seria colocar o desviar a un archivo de texto con set textmerge y sentencias \\ dichos mensajes y revisarlos luego de cerrar tu formulario por que eventos y metodos paso.

Ahora lo que no entiendo es el porque del FORMSET.MODAL estara esto correcto?, yo te recomiendo que desactives los formularios que no utilizas es decir si tienes los tres formularios visibles y habilitados el usuario puede cambiar el foco para cualquiera de los tres formularios en cualquier momento, estan preparados tus formularios para recibir el foco en cualquier momento?, en cambio lo recomendado es trabajar con el formulario necesario y una vez vuelto a otro formulario deshabilitar y hacer invisible al formulario que ya no se usa, yo tambien comence trabajando con conjuntos de formularios y me ha dado terribles dolores de cabeza y luego encontre una solución simple usar un formulario y los formularios secundarios anexados a este en algun momento lo guardo dentro de una clas VCX que al momento de cargar el formulario principal lo agrego a este como un objeto

THISFORM.INIT()
SET CLASSLIB TO X.VCX
THISFORM._obj=CREATEOBJECT( "XXX", THISFORM )
SET CLASSLIB TO
CLEAR CLASSLIB
...

Y en algun momento cuando requiero utilizar el formulario secundario lo llamo asi
WITH THISFORM._obj
.ENABLED=.T.
.VISIBLE=.T.
.SHOW()
ENDWITH
THISFORM.ENABLED=.F.
deshabilitando el formulario llamador entonces el usuario solo tiene disponible el segundo formulario activo y al momento de volver al formulario principal lo habilito y deshabilito el secundario.

Con este pequeño descubrimiento he logrado controlar bien el flujo del foco que se puede tornar incontrolable si no lo programas metodicamente.

PD: el modo modal de una ventana lo que hace es que mientras este habilitada la ventana el usuario no pueda desviar el foco hacia otras ventanas mientras dicha ventana no se haya cerrado.

Espero haber ayudado!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:formset modal, comportamiento inesperado

Publicado por Luighi (105 intervenciones) el 25/03/2010 15:21:26
hago el formset modal para que desactivar el menú
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:formset modal, comportamiento inesperado

Publicado por xx (378 intervenciones) el 25/03/2010 19:39:52
Ahhh!!!, bueno te cuento como yo lo hago no pretendo que sigas mi consejo pero si que conozcas alguna alternativa, tengo un programa principal llamado MAIN.PRG este llama a un formulario chiquito, con ShowWindow=2, WindowState=2,MDIForm=.T. este pide el usuario y el password dicho form chequea y si es correcto marca una variable publica access=.T. de lo contrario marca como access=.F., ademas carga el perfil del usuario o sea los items del menu que tienen hablitados y los deshabilitados en una variable, luego se cierra y el formulario y se da clear event.
Sigue la ejecución del MAIN.PRG y a continuación de acuero al resultado de access llama a otro formulario que es el principal del programa que tiene el menu principal etc. este formulario en el evento init abre una tabla en la que consta un codigo de menu el titulo y los comandos que se ejecutan cuando se accede a dicho menu chequea el perfil del usuario y carga solo los menus y opciones que estan habilitados para dicho usuario, y algo muy importante pone un acondicion en cada menu SKIP FOR !_choice una vez hecho esto se muestra el formulario y el menu ya estoy en la pantalla principal del programa y tengo el menu habilitado cuando el usuario accede a cualquier opción del menu este ejecuta el comando que tiene dicho menu y generalmente llama a otro formulario que en este caso seria secundario, ahora cuando el formulario principal se desactiva o se ejecuta FPRINC.DEACTIVATE() yo asigno _choice=.F. y por consiguiente el menu me queda deshabilitado quedando bisible el formulario secundario y vez terminado o eliminado el formulario secuendario en su metodo FSECOND.RELEASE() le asigno _choice=.T. y al volver al formulario principal me queda el menu habilitado porque en el metodo FPRINC.ACTIVATE() ejecuto SHOW MENU x, bueno espero te sirva si quieres mayores datos postealo.

fijate en este post
Disponible en: http://www.lawebdelprogramador.com/news/mostrar_new.php?id=36&texto=FoxPro/Visual+FoxPro+Avanzado&n1=551203&n2=1&n3=0&n4=0&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar