Valid

439 views
Skip to first unread message

Arnaldo Toledano (GMail)

unread,
Jan 14, 2011, 12:56:02 PM1/14/11
to publice...@googlegroups.com
Estimados.
Me encuentro con un problemilla.
Les doy un ejemplo sencillisimo para que entiendan mi pregunta.
 
Formulario= XX
Cuadro de texto= campo1
Y los botones de
Grabar - Escapar.
 
En el cuadro de texto campo1 tengo en el valid.
If Empty(thisform.xx.campo1.Value)
     mensagebox("El dato no puede ser vacio",0)
     Return .F.
Endif
 
Si el usuario quiere cancelar, por lo que se le ocurra y pulsa el boton escapar,  el valid sigue actuando y no deja seguir hasta que no se ingrese un dato.
Como se soluciona eso ?
Es decir analudar el valid cuando se desee dar ESCAPAR ?
 
Agradesco informacion
 
 
Arnaldo Toledano
Córdoba
Argentina


__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5787 (20110114) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com

marcelobu...@gmail.com

unread,
Jan 14, 2011, 1:03:53 PM1/14/11
to publice...@googlegroups.com
Hola

Pone ese codigo en el LOSTFOCUS

Saludos
MarceloBuenosAires
__________

GeoSys Diseño de Software

unread,
Jan 14, 2011, 1:07:19 PM1/14/11
to publice...@googlegroups.com
Buenas Arnaldo.

Es lógico que no salgas del foco porque eso es lo que tienes en el texto campo1.

Pero si le das esa opción en el click de Guardar la cosa cambia,
Eje.
If Empty(thisform.xx.campo1.Value)
     mensagebox("El dato del campo1 no puede ser vacio", 48, "Debe digitar el campo1")
    thisform.campo1.setfocus && Para que vaya a campo1     
    Return
Endif

Saludos

Anthony Contreras Peralta.


Costa Rica.

Jose Zurita

unread,
Jan 14, 2011, 1:17:09 PM1/14/11
to PublicesvFoxpro
Quitalo del evento Valid y como dice el compañero, pon este codigo en el Evento osFocus y te funcionará.
El problema que tienes es que el valid se dispara unque no metas nigun dato y tratas de tomar el control de otro Control u objeto.


Date: Fri, 14 Jan 2011 15:03:53 -0300
Subject: Re: [vfp] Valid
From: marcelobu...@gmail.com
To: publice...@googlegroups.com

Darío Castillejos

unread,
Jan 14, 2011, 3:13:36 PM1/14/11
to publice...@googlegroups.com

 

Revisa el siguiente enlace:

 

http://www.portalfox.com/index.php?name=News&file=article&sid=931

 

Saludos.

 


IVAN MARTINEZ

unread,
Jan 14, 2011, 3:15:03 PM1/14/11
to publice...@googlegroups.com
Vease figura adjunta
 
 
Esta forma la invente cuando programaba en vfp3 hac ecomo 10 años y aun esta asi en mis aplicaciones.
 
 
En el keypress del form tengo
 

LPARAMETERS

nKeyCode, nShiftAltCtrl

if

nKeyCode=27

*wait window "Pulso esc (FORMA)" TIMEOUT 1

thisform.mtIr_a_ini()

endif

 
donde
 
mtIr_a_ini es
* estacion es un campo dummy que tengo en la forma para poner el cursor ya que todos los demas campos pudieran estar inhabilitados
 
THISFORM.ESTACION.ENABLED=.T.

THISFORM.ESTACION.Setfocus()

Ivan Martinez von Halle
Venezuela


De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Arnaldo Toledano (GMail)
Enviado el: Viernes, 14 de Enero de 2011 01:26 p.m.

Para: publice...@googlegroups.com
Asunto: [vfp] Valid
estacion.JPG

Walter R. Ojeda Valiente

unread,
Jan 14, 2011, 5:51:51 PM1/14/11
to publice...@googlegroups.com
Hola Arnaldo

Yo utilizo otro aprovechamiento. Tengo una función llamada CursorSobre(), que me devuelve el nombre del control sobre el cual está posicionado el cursor. Si está posicionado sobre el botón "Cancelar" entonces sale del método. Ejemplo:

if CursorSobre("BOTON_CANCELAR")
  Return
endif

*** Aquí coloco la validación

Return
*
*

Y la función CursorSobre() tiene la siguiente definición:

Function CURSORSOBRE
LParameters Controles
Local Num, Objeto, Resultado
 
  Resultado = .F.
 
  Num = AMouseObj(Vec, 1)
 
  if Num > 0
    Objeto = Vec[1]
    Objeto = Upper(Objeto.Name)
    if Objeto $ Controles
      Resultado = .T.
    endif
  endif
 
Return(Resultado)
*
*

Saludos.

Walter.

orlin

unread,
Jan 14, 2011, 5:56:21 PM1/14/11
to Comunidad de Visual Foxpro en Español
Hola Arnaldo, esto lo puedes solucionar de varias maneras

IF EMPTY(this.Value)
nAnswer = MESSAGEBOX("Debe tener un valor, que hara,",5+32+0, "Info")
IF nAnswer = 4
RETURN .f.
ELSE
RETURN .t.
ENDIF
ELSE
this.Refresh
RETURN .t.
ENDIF

copia este codigo el el valid de tu texbox y pruebalo, si oprimes
Reintentar Volvera
al mismi texbox, y oprimes cancelar pasara al siguiente control.
espero te sirva

Fabricio

unread,
Jan 14, 2011, 6:21:40 PM1/14/11
to Comunidad de Visual Foxpro en Español
Si quieres que al presionar la tecla escape cierre el formulario o
abandone la edición, entonces puedes hacer lo siguiente.

En tu formulario crea un propiedad, puede ser CancelPressed, le
asignas .F.
En tu método KeyPress, si e presionó Escape le asignas .T. a
CancelPressend
Tu botón Cerrar o Salir debe tener verdadera la propiedad Cancel

Ahora en el valid del control pones:

If !ThisForm.CancelPressed
If Empty(thisform.xx.campo1.Value)
     mensagebox("El dato no puede ser vacio",0)
     Return .F.
Endif
EndIf

De manera que si se presiona Escape no se ejecuta el valid.

El formulario por sí solo le envía el Focus al botón que tiene
asignado Cancel=.T.

En el Click de tu botón debes poner

If ThisForm.CancelPressed
Que harás si presionó Escape
Puedes iniciarlizar todos los controles para permitir una nueva
captura
le asignas .F. a CancelPressed y le haces SetFocus al primer
Control
Else
Lo que debe hacer de forma normal cuando se presiona escape, o sea
cerrar el form.
EndIf

Espero te sirva, así lo hago yo y me funciona bien.

Saludos

Fabricio

On 14 ene, 11:56, "Arnaldo Toledano \(GMail\)"

Arnaldo Toledano (GMail)

unread,
Jan 16, 2011, 4:54:08 PM1/16/11
to publice...@googlegroups.com
Gracias a todos lo que me sugirieron como solucionar el problema.
Me parecio mas acertado el metodo de Walter.
 
En realidad buscaba como lograr el nombre de boton que pulsaba, pero no sabia como hacerlo.
Pero....
Tengo un otro problema.
Revise el codigo en el caso y funciona correctamente.
El problema es que en el LOSTFOCUS le indico al sistema que continue con el proximo CUADRO DE TEXTO, donde tengo exactamente lo
mismo, no puedo permitir que siga con campo vacio.
Que ocurre aca.
El valor del BOTON donde esta el curso ya no es CANCELAR, y no me deja seguir.
Se entiende.
Adjunto formulario
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5789 (20110115) __________
valid.jpg

Walter R. Ojeda Valiente

unread,
Jan 16, 2011, 6:11:28 PM1/16/11
to publice...@googlegroups.com
Hola Arnaldo

Yo para hacer las validaciones no uso el método VALID(), uso el método LOSTFOCUS(), de la siguiente manera:

método LOSTFOCUS
-----------------------
Local lResultado

 
  if CursorSobre("BOTON_CANCELAR")
    Return
  endif

  lResultado = .F.     && Soy pesimista, supongo que los datos no validarán
 
  * Aquí valido lo que haya que validar, si la validación está OK, pongo lResultado = .T.
 
  if !lResultado     && Si la validación no tuvo éxito, el cursor se quedará en el mismo control, no se moverá.
     This.SetFocus()
     NODEFAULT
  endif

Return
*
*

Si lo que necesitas es mover el mouse puedes utilizar el comando MOUSE AT nFila, nColumna

Saludos.

Walter.

 


From: arnaldo....@gmail.com
To: publice...@googlegroups.com
Subject: Re: [vfp] Valid
Date: Sun, 16 Jan 2011 18:54:08 -0300
valid.jpg

Mario López

unread,
Jan 17, 2011, 7:53:23 AM1/17/11
to Comunidad de Visual Foxpro en Español
Arnaldo:

si vas a validar en LostFocus, antes del RETURN .F. deberías
hacer NODEFAULT para que no pase al siguiente campo.

HTH
Mario

On Jan 16, 6:54 pm, "Arnaldo Toledano \(GMail\)"
<arnaldo.toled...@gmail.com> wrote:
> Gracias a todos lo que me sugirieron como solucionar el problema.
> Me parecio mas acertado el metodo de Walter.
>
> En realidad buscaba como lograr el nombre de boton que pulsaba, pero no sabia como hacerlo.
> Pero....
> Tengo un otro problema.
> Revise el codigo en el caso y funciona correctamente.
> El problema es que en el LOSTFOCUS le indico al sistema que continue con el proximo CUADRO DE TEXTO, donde tengo exactamente lo
> mismo, no puedo permitir que siga con campo vacio.
> Que ocurre aca.
> El valor del BOTON donde esta el curso ya no es CANCELAR, y no me deja seguir.
> Se entiende.
> Adjunto formulario
>
> __________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5792 (20110116) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
>
> http://www.eset.com
>
>
>
>  valid.jpg
> 57KViewDownload
Reply all
Reply to author
Forward
0 new messages