Fecha actual Mié Jun 26, 2024 12:55 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 10 mensajes ] 
Autor Mensaje
NotaPublicado: Sab Nov 26, 2005 9:38 am 

Registrado: Mié Oct 19, 2005 7:06 pm
Mensajes: 70
Ubicación: Valencia - España
Hola,

Os dejo este proyecto.

Son dos controles edit, y un botón.

El botón solo hace un cierre del formulario.

El primer control edit tiene esto en el onExit:

METHOD Edit1OnExit( oSender ) CLASS TForm1
IF oSender:Caption > 9999
MessageDlg("Mayor que 9999", mtWarning, mbYes)
oSender:SetFocus()
ENDIF
return

El caso es que si ponemos en el tEdit1 un valor superior a 9999 y pulsamos el botón, se dispara dos veces el OnExit.

Saludos,
José Luis Capel


Adjuntos:
Form1.zip [1.46 KiB]
280 veces
Arriba
 Perfil  
Responder citando  
NotaPublicado: Dom Nov 27, 2005 1:01 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
jose luis capel escribió:
Hola,

Os dejo este proyecto.

Son dos controles edit, y un botón.

El botón solo hace un cierre del formulario.

El primer control edit tiene esto en el onExit:

METHOD Edit1OnExit( oSender ) CLASS TForm1
IF oSender:Caption > 9999
MessageDlg("Mayor que 9999", mtWarning, mbYes)
oSender:SetFocus()
ENDIF
return

El caso es que si ponemos en el tEdit1 un valor superior a 9999 y pulsamos el botón, se dispara dos veces el OnExit.

Saludos,
José Luis Capel


Sr. José Luis.

Una posible solución, válida para mí que trabajo con C3.


Adjuntos:
Form1.rar [1.42 KiB]
292 veces

_________________
Un saludo.
Jesús P. Melgar Velasco
Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Dom Nov 27, 2005 6:14 pm 
Avatar de Usuario

Registrado: Vie Oct 14, 2005 12:50 pm
Mensajes: 78
Ubicación: Girona
Jesús,

Es un "apaño" para este preciso ejemplo, pero no la solución al ¿porque se lanza el evento OnExit 2 veces???

_________________
Un Saludo,
Xevi.


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Dom Nov 27, 2005 10:24 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
Xevi escribió:
Jesús,

Es un "apaño" para este preciso ejemplo, pero no la solución al ¿porque se lanza el evento OnExit 2 veces???


Xevi, hola de nuevo.

Mira 'apaños', se hacen en todos los sitios y a toas horas (por desgracia), ahora bien, te recuerdo que en windows deberiamos olvidarnos del VALID del viejo Clipper, es decir que hacer las validaciones al pulsar el correspondiente botón, es una muy buena forma de realizar este trabajo, recuerdo que el valid funcionaba (y se diseñó) para un entorno SIN MULTITAREA ni EVENTOS, por lo que se llega ha hacer MUY incomodo para los usuarios (comprobado).
Conclusión, yo desde FW16, realizo las comprobaciones al pulsar el correpondiente boton, otra cosa es que SI, parece ser que el evento se dispara DOS VECES SOLO CUANDO TRATAS de pasar directamente desde el edit al boton, en el funcionamiento normal de pasar al siguiente control (segundo edit) trabaja bien. Todo este rollo viene a cuenta de que es cierto que C3 tiene bug's (ni menos ni mas que otros entornos), pero si realmente quieres avanzar en un proyecto, puedes avanzar, no existe un unico camino para nada en la vida, otra cosa es que tengas una situacion insalvable (yo aun no la he encontrado con c3) y tengas que pedir ayuda y siempre la he recibido por parte del autor de c3 en forma de nuevos caminos o solucion en la proxima actualización.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Mar Dic 06, 2005 7:37 pm 

Registrado: Mié Oct 19, 2005 7:06 pm
Mensajes: 70
Ubicación: Valencia - España
Jesús,

Citar:
Conclusión, yo desde FW16, realizo las comprobaciones al pulsar el correpondiente boton, otra cosa es que SI, parece ser que el evento se dispara DOS VECES SOLO CUANDO TRATAS de pasar directamente desde el edit al boton, en el funcionamiento normal de pasar al siguiente control (segundo edit) trabaja bien.


Parece que Bruno ha arreglado este tema.

Saludos,
José Luis Capel


Arriba
 Perfil  
Responder citando  
NotaPublicado: Mié Dic 07, 2005 11:20 pm 

Registrado: Vie Dic 02, 2005 5:37 pm
Mensajes: 8
Jose Luís, Jesús:

¿Por que no probáis corrigiendo en el mètodo:

METHOD Edit1OnExit( oSender ) CLASS TForm1
IF oSender:Caption > 9999
MessageDlg("Mayor que 9999", mtWarning, mbYes)
oSender:SetFocus()
ENDIF
return

cambiando por:

if ::edit1:caption > 9999
....
edit1:setFocus()
endif

A mi me parece que funciona correctamente, validando el edit al salir de él mismo (tabulador, ratón, retorno).

En la forma que proponéis la validación se realiza sobre todo el diálogo.

Jesús, a veces se desea que por la entrada de un edit los otros campos de edición se modifiquen o controlen de una determinada manera, por eso creo que el onExit debe poder utilizarse de las dos formas que se propone:

a) al salir del campo
b) al salir del diálogo

Miquel


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Jue Dic 08, 2005 9:24 am 

Registrado: Mié Oct 19, 2005 7:06 pm
Mensajes: 70
Ubicación: Valencia - España
Miquel,

No he probado tu sugerencia. No obstante, lo que sugieres hace que sea dependiente del formulario. Imagínate que creas un método de validación general de lo que sea... Se recibe osender, no ::edit 1. En otros casos es perfectamente válida tu sugerencia.

Espero haberme explicado bien.

Saludos,
José Luis Capel


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Jue Dic 08, 2005 11:40 am 
Site Admin
Avatar de Usuario

Registrado: Jue Oct 06, 2005 10:49 pm
Mensajes: 655
Ubicación: España - Salamanca
La sugerencia de Miquel fallaba igual antes de la actualización, ahora las dos son igual de válidas, de hecho oSender y ::Edit1 son el mismo objeto en ese ejemplo.

_________________
Un saludo,
Bruno Cantero
www.c3compiler.com


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Jue Dic 08, 2005 12:14 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
jose luis capel escribió:
Miquel,

No he probado tu sugerencia. No obstante, lo que sugieres hace que sea dependiente del formulario. Imagínate que creas un método de validación general de lo que sea... Se recibe osender, no ::edit 1. En otros casos es perfectamente válida tu sugerencia.

Espero haberme explicado bien.

Saludos,
José Luis Capel


Hola a todos.

TOTALMENTE de acuerdo contigo. Mejor oSender.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
NotaPublicado: Jue Dic 08, 2005 12:48 pm 

Registrado: Vie Dic 02, 2005 5:37 pm
Mensajes: 8
José Luís,


Citar:
El caso es que si ponemos en el tEdit1 un valor superior a 9999 y pulsamos el botón, se dispara dos veces el OnExit.



Ahora comprendo perfectamente lo que querías decir ayer (cosas de la noche).

Sin embargo lo acabo de probar con la última versión y a mi me funciona perfectamente: 9999,9 + boton > un solo aviso de validez de datos y vuelve al campo a esperar.

Y tienes razón en lo de construir una rutina genérica: edit1 es un objeto concreto, sender qualquier cosa que llegue.


Miquel


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 10 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron