Formulario no se cierra

Hola, Amigo, necesito me des una ayuda con un tema que tengo un formulario de altas mod.y elim. Etc. Y resulta que en este formulario tengo un botón command de Buscar el cual llama a otro secundario donde busco el Alumno y en este formulario2 tengo otro boston que se cierra y vuelve al 1º formulario todo eso me lo hace bien me trae los datos que quiero pero cuando quiero salir o cerrar el 1º formulario no responde a nada queda ahí sin hacer nada de nada lo que tengo que hacer es cerrar visualfox y comenzar de nuevo. ¿Dónde fallare?
Gracias

1 Respuesta

Respuesta
1
¿Cómo andas? Che... por lo que me contás me parece que te esta quedando en un ciclo indefinido... no se como traerás los datos al form 1, proba a comentar el código para ver si te hace lo mismo, o sea, deja la parte de pasar al form2, volver al form1 pero no traspases los datos, es un poco complicado darte una respuesta porque no se en detalle el código pero es una posibilidad de que te quede ciclando.
¿Proba y contestame para ver que tal te fue dale? Éxitos!
Andres. Te comento como hice:
Tengo En el 1º Formulario "Alumnos" donde doy Alt-Mod-Elim-Buscar-Listar estos son con botones command. En el evento click del botón command "Buscar" llamo al 2º Formulario con el siguiente código:
Do form buscaralumno with thisform.txtdni_alumno
Luego en el evento When del mismo botón "Buscar" tengo el sig.código:
Se le alumnos
locate for alumnos.dni_alumno=thisform.txtdni_alumno.value
if found()
   store alumnos.id to thisform.txtid.value
   store alumnos.dni_alumno to thisform.txtdni_alumno.value
   store alumnos.apellido_nombres to thisform.txtapellido_nombres.value
endif
thisform.refresh()
Ahora en el Init del 2º Formulario llamado "buscaralumno" tengo el siguiente código:
parameter xObjeto
public xObj
xObj=xObjeto
Una vez encontrado el alumno debo volver al 1º Formulario y lo hago con un botón command "Volver" que en el evento click tengo el siguiente código:
xObj.value =ThisForm.Txtdni.value
Thisform.release()
Todo esto lo hace bien pero cuando quiero cerrar el 1º formulario en el botón "Cerrar" que tiene el código:
Thisform.release()
No se cierra ni responde a nada, tengo que cerrar todo visualfox. No se donde puse mal el código.
Y en el mismo formulario tengo otro botón command capturar foto alumno y tengo el mismo procedim. (Si es necesario te lo envío) y me hace lo mismo Si me puedes ayudar te agradeceré.
¿A propósito soy de la Provincia San Juan y vos de donde?
Un abrazo. Fernando.
No me doy cuenta donde podes estar fallando... yo tengo un proyecto de la universidad donde hice ese tipo de ayuda pero es bastante distinto a lo que me planteas... te propongo dos posibilidades, o te paso como lo tengo hecho o me pasas lo tuyo así puedo probarlo con debug y todo...
Soy de Sta Fe! Y estudio Ing. en Comp. en la UCSE DAR...
Hola! Bueno te doy mi e-mail par que me envíes tu ejemplo y dame el tuyo y te envío los formularios. Para que me lo revises.
[email protected]
Un abrazo.
Perfecto...el mio es [email protected]
Te paso el ejemplo esta tardecita... tipo 20.30 hs...
El viernes te pase un mail.. no se si te llego, cualquier cosa me avisas... nos vemos!
Si lo recibí disculpame, estuve mirando y quise ejecutarlo como me dijiste y desde el .exe no se puede pero lo ejecute con VFP y observe que tienes las búsqueda en el mismo formulario con un grid. ¿El mio es con otro formulario aparte es decir haciendo click en un botón para abrir un formulario 2 y allí buscar los datos y volverlos al formulario 1 todo eso funciona bien lo hago con parámetros y me funciona bien lo que no se porque no se cierra el formulario 1. Vos no lo pudiste abrir al mio?
No no... fíjate que yo traigo los datos de otro form. Así tal cual lo necesitas vos... no me acuerdo en este momento y no tengo para consultarlo ahora en que form lo hago pero aquellos form que tienen un command con un signo de pregunta son los que me llaman al formulario de ayuda (se abre otro form) que al elegir el dato te los paso al form 1.
Me acuerdo que llamo a la ayuda desde dos form. Pero no me acuerdo cuales son y el proyecto lo tengo en mi casa... esta tarde después de las 14:15 te lo confirmo o fíjate que lo tienes que encontrar...
Al tuyo agregue los form que me pasaste a un proyecto pero me dan muchos errores y no lo pude ejecutar...
Che.. viste que me decías que no lo pudiste ejecutar desde el .exe debe ser porque tienes que volver a generar el preyecto y el ejecutable... buenos.. nos vemos!
Andres, estuve mirando tu formulario report_listado_c donde en el Init pones una variable publica solicita _ayuda y le das el valor 0 es decir usas una bandera. Luego en el Gostfocus del Text1 colocas el siguiente código:
Select personal
if solicita_ayuda=1
  thisform.text1.value=personal.nro_legajo
endif
¿Que haces en este evento?
Luego en el evento KeyPress tienes este código:
LPARAMETERS nKeyCode, nShiftAltCtrl
if (nkeycode = 97) OR (nkeycode = 65)
solicita_ayuda=1
DO FORM ayuda
ENDIF
tambien explicame que haces en este evento?
luego en el evento Lostfocus colocas este codigo
IF thisform.text1.value <> 0
SELECT personal
SET FILTER TO
SET ORDER TO por_legajo
SEEK thisform.text1.Value
IF FOUND()
thisform.label2.Caption=personal.nombre
else
thisform.label2.Caption="Inexistente"
MESSAGEBOX(" Legajo inexistente ")
ENDIF
endif
Acá realiza la búsqueda en primera instancia si ir al ayuda.
Luego tienes el boton command "?" con el sig.código:
MESSAGEBOX("Para ver la ayuda de personal también puede presionar la tecla A sobre el cuadro de texto Legajo")
solicita_ayuda=1
thisform.text1.setfocus
DO FORM ayuda
Acá llamas al 2 formulario "ayuda"
¿Pero observo en el form 2 que no cargas en ninguna variable los datos como los llevas?
Saludos
En el Init pones una variable publica solicita _ayuda y le das el valor 0 es decir usas una bandera. Luego en el Gostfocus del Text1 colocas el siguiente código:
Select personal
if solicita_ayuda=1 SI SOLICITO AYUDA
thisform.text1.value=personal.nro_legajo  PASAS EL NRO_LEGAJO DONDE QUEDO SELECCIONADO EL REGISTRO EN LA TABLA PERSONAL 
endif
¿Qué haces en este evento?
Es decir... cuando volvés a hacer foco en el text y si había solicitado ayuda entonces coloca en el text1 el nro de legajo que figura en la tabla personal. Si observas en el form ayuda tienes una grilla, esa grilla esta directamente relacionada con la tabla de la base de datos entonces cdo vos seleccionas o a medida que te vas desplazando en esa grilla el puntero al registro también se va moviendo, es por eso que cdo haces un enter se te cierra la ayuda, volvés a hacer foco en el text 1, como pediste ayuda decís que pase personal. Nro_legajo entonces te pasa el dato donde quedo el puntero del registro posicionado en el form ayuda.

Luego en el evento KeyPress tienes este código:
LPARAMETERS nKeyCode, nShiftAltCtrl
if (nkeycode = 97) OR (nkeycode = 65)
solicita_ayuda=1
DO FORM ayuda
ENDIF
tambien explicame que haces en este evento?
Es decir... si en el text1 presionas la tecla "A" o "a" llamas al form ayuda y pones la variable solicita_ayuda = 1´

luego en el evento Lostfocus colocas este codigo
IF thisform.text1.value <> 0
SELECT personal
SET FILTER TO
SET ORDER TO por_legajo
SEEK thisform.text1.Value BUSCAS EN LA TABLA PERSONAL POR NRO LEGAJO LO QUE ESTA EN EL TEXT 1
IF FOUND() SI LO ENCUENTRA PASAS LOS DATOS QUE NECESITAS
thisform.label2.Caption=personal.nombre
else
thisform.label2.Caption="Inexistente"
MESSAGEBOX(" Legajo inexistente ")
Endif
Endif
Acá realiza la búsqueda en primera instancia si ir al ayuda.
Cuando te vas del text 1, lo que hace es traer los datos correspondientes del nro_legajo que ingresaste, ya sea en forma manual o a través de la ayuda. Entonces lo único que traes con la ayuda es el código que es el campo clave, después los otros datos los buscas en este form. ¿Esto por qué lo hago así? Si quieres desde el form ayuda podes traer todos los datos y no realizar la búsqueda acá, pero como también podes ingresas el código en forma manual (sin solicitar la ayuda) tienes que buscar los datos de alguna forma entonces haciéndolo así como lo programe conseguís los datos del código que ingresaste.

Luego tienes el boton command "?" con el sig.código:
MESSAGEBOX("Para ver la ayuda de personal también puede presionar la tecla A sobre el cuadro de texto Legajo")
solicita_ayuda=1
thisform.text1.setfocus
DO FORM ayuda
aca llamas al 2 formulario "ayuda"
Exactamnete, llamas al form ayuda y pones solicita_ayuda = 1

¿Pero observo en el form 2 que no cargas en ninguna variable los datos como los llevas?
Esto te lo explique al principio de todo, de ultima podes usar variables si te queda más cómodo... pero de la forma que lo hice es más directo.
En el cancelar del form ayuda solicta_ayuda = 0 ya que no va a pasar el dato porque lo cancela...
Bueno... no se si fue claro, es que es un poco difícil explicarlo por escrito, si no me entendés si quieres podemos fijar un horario y hacer una video llamada por el msn.
Andres. Si entiendo tu forma de hacerlo lo que no lo puedo adaptar es al mio yo tengo un 1º formulario donde trabajo con datos de alumnos es decir. Altas Bajas Modificaciones, Búsqueda Listar Imprimir
Lo que que hice es un formulario de ABM pero con botones command y es el botón command llamo a otro formulario y ahí busco el legajo de un alumno y cuando vuelvo tarigo el campo dni para buscar todos los demás datos en el evento "when" del command "Buscar" y ahí si me muestra todos los datos correspondientes. Más o menos el código es así:
Form1- "Alumnos"
command "Buscar" (evento click)
do form buscaralumno with thisfrom.txtdni_alumno
command "Buscar" (evento when)
sele alumnos
locate for alumnos.dni_alumno=thisform.txtdni_alumno.value
if found()
store alumnos.id to thisform.txtid.value
store alumnos.dni_alumno to thisform.txtdni_alumno.value
store alumnos.apellido_nombres to thisform.txtapellido_nombres.value
store alumnos.domicilio to thisform.txtdomicilio.value
endif
thisform.refresf()
Form2 "Buscaralumnos" en el evento "Init"
parameter xObjeto
public xObj
xObj=xObjeto
command "Volver" evento click
xObj.value =ThisForm.Txtdni.value
Thisform.release()
En el form2 hago el proceso de busueda encuentra el dato y luego vuelvo al form1 tare los datos al proceso de búsqueda del when del command "buscar" y muestra todos los demás datos. Todo eso lo hace bien lo que no funciona es cerrar el formulario 1 y es cuando llamo el segundo formulario y vuelvo ahí ya no se cierra me pasa cuando capturo una imagen porque use la misma metodología.
Bien... entiendo tu forma... aunque sigo insistiendo que se puede adaptar a lo que yo digo, je je, si pudiera ver bien esos dos form con las tablas que usas te podría solucionar el tema... lo que la otra vez me pasaste no lo pude ejecutar... y no se me ocurre porque no se te cierra el form1, tendría que probarlo en ejecución... para eso me tienes que pasar todo lo que usas para ejecutar dichos formularios... sino no voy a poder probarlo...
Bueno te mando nuevamente los formularios con las carpetas correspondientes imágenes icono y forgrafias
Esta la carpeta COLEGIO donde se encuentran los form y archivos y otra Fotografías donde se encuentran las fotos de los alumnos (hay una sola que es el logo del colegio que les coloca en un primer momento hasta no selelccionar o capturar. Otra carpeta iconos que son las imágenes de los botones la carpeta principal Programa1 proba así sino colocala en el C:\programas sin el 1. cualquier cosa me avisas.
¿Te sirvió lo que te mande?
Andres disculpa que no te conteste y no te deje dormir la siesta (No seas Sanjuanino para dormir siesta) Jajaja.
Sabes probé tu formulario si con el botón buscar abre el 2 formulario pero cuando selecciono el alumno y vuelvo no me muestra en el primer formulario los datos del alumno seleccionado.
¿Qué sera?
Bueno che... no se si te habré solucionado el problema pero como no me volviste a escribir creo que si... en ese caso te pido que finalices la pregunta así no me queda dando vueltas acá, je...
Suerte che! Nos vemos... que pases unas felices fiestas!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas