El Menu del formulario no respeta el valid del textbox

Primero que nada es muy grato saber que aun quedan programadores usando el bendito fox!
A ver si alguien me puede ayudar con este problema:

Tengo un formulario de nivel superior que a su vez tiene su propio menu de nivel superior, el mismo tiene accesos rápidos, por ejemplo apretando la combinación de teclas CTRL + FIN me ejecuta el método grabar, el problema es que si estoy en un textbox y el mismo tiene un valid y presiono las teclas CTRL + FIN (o hago click en la opción Grabar del menu)
, nunca me ejecuta el método Valid del textbox, solo el método grabar, también me causa problemas porque si hago algún cambio en el textbox y le doy CTRL + FIN el comando GETFLDSTATE no me detecta que hice cambios y no me graba nada. ¿Alguna idea o pista que me puedan dar?

1 Respuesta

Respuesta
1

CReo haber entendido...

Si tienes un método en el formulario que tiene por nombre grabar y lo llamas desde el menú algo así..

Thisform. Grabar()

Dentro del mismo método pon antes que cualquier secuencia la siguiente línes

thisform.text1.valid

Y luego sigue con las siguientes sentencias; así te aseguras que se ejecute el valid.

Muchas gracias por tu respuesta! Pero el método grabar esta en una clase base, es decir la utilizo para todos los formularios de mi sistema por lo que no puedo hacer referencia a un textbox en particular, si podría poner en el grabar del formulario la llamada al método valid del text como vos decís (thisform.text1.valid) y después hacer un dodefault() para que me lea el código base del método grabar, pero quería algo más general ya que sino tendría que agregar en el grabar una llamada a todos los textbox del formulario, ya que al momento de grabar puedo estar parado en cualquier textbox, es decir debería poner en el método grabar del form algo así:

thisform.text1.valid()

thisform.text2.valid()

thisform.text1.valid()

thisform.textXXX......valid()

dodefault() && para que me lea el grabar de la clase

Creo que el error podría venir por otro lado, tal vez el poner al menú como de nivel superior hace que primero le de más importancia a lo que dice el menú que al formulario, sacar la opción de nivel superior al menú no puedo ya que sino no me agrega el menú al formulario

Se me plantean muchas interrogantes con este tema (cosa habitual cuando se desconoce el por que de que y para que); ya que no se por que necesitas un valid de un textbox que no haz usado; ¿Me pregunto si no sería mejor actuar a nivel tabla en vez de a nivel objeto? Y puedes de ese modo hacerlo más general.

Por otro lado lo del menú está bien así.

Todo empezó cuando al estar modificando el valor del textbox y darle CTRL + FIN el comando GETFLDSTATE no me identificaba que el textbox tuvo cambios, por lo que no me lo guardaba en la tabla, luego haciendo pruebas encontré que tampoco ejecutaba el método del valid, en los valid de los textbox verifico que se hayan ingresados solo caracteres permitidos, por ejemplo no permito ingresar el carácter " (comillas).

Por otro lado si pongo un set step on en el método grabar si me detecta los cambios y si me graba todo, por lo que supuse que podría ser por un problema de velocidad de la pc, le mande un inkey(5) y saque el set step.. pero nada, sigue fallando...

Perdona la demora en respnder..

Pero podrías hacer que el sistema pase por los métodos valid de los textbox unsando las siguientes sentencias:

For Each oControl In Thisform.Controls
     If Lower(oControl.BaseClass)=="textbox"
          OControl. Valid()
     Endif
Endif

Esto hará que pase por todos los valid de todos los textbox ubicados en el formulario.

No te preocupes por la demora! ya no programo todos los días, sino cuando tengo algún hueco por lo que no estoy apurado. Estuve probando sacar el menú y llamar al grabar desde un commandbutton y/o toolbars y funciona correctamente me lee los valid y me graba correctamente los cambios (GETFLDSTATE  si me detecta la modificación), creo que voy a terminar sacando el menú individual de cada formulario y dejar una toolbars.

Antes también había probado lo de llamar a los valid desde el grabar, en principio me tira el error de caracteres inválidos, pero en ves de detener la ejecución y quedarse en el valid sigue con el grabar y eso que en el valid tengo un Return .F. luego de tirar el mensaje de error!, igualmente si no logro que el GETFLDSTATE me detecte los cambios saco el menú individual de los formularios y pongo la barra! 

Cuando lanzas un procedimiento que llame a otro por má que le indiques Return .f. seguirá en la linea siguiente del procedimiento desde donde lo llamaste..

Podrías hacer que se detenga por ejemplo si haces:

if !thisform.text1.valid()
     && Abortar la continuidad del procedimiento.
Endif

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas