* Error () --> "Envuelve" todo el funcionamiento del textbox, se "dispara" ante cualquier error relacionado con el textbox
--> Init --> Al crearse el textbox, lo hace antes del init del contenedor inmediato superior
| * When --> Para textbox enabled=true, si éste método devuelve falso, no permite "entrar" al textbox
| | GotFocus --> Cuando el control recibe el foco, por teclado o por ratón, o por setfocus
| | | InteractiveChange --> Cada vez que se modifica el value del textbox
| | | KeyPress --> Cada vez que se pulsa el teclado, en el textbox
| | Valid --> Al intentar salir del control, si devuelve 0 o .F., no pasa al lost focus, ** (Ver mas abajo)
| | | LostFocus --> Cuando el valid devuelve un número no cero o .T. que es equivalente a que devuelva 1
| * ProgrammaticChange --> Cuando por programa se cambia el value del textbox por una asignación textbox.value = algo
| * UIEnable --> Cada vez que el formulario se ACTIVATE o DEACTIVATE.
<-- Destroy --> Al liberar el formulario, primero se "destroy" los elementos más internos y luego los más externos
** Si value devuelve 0, el foco queda en el textbox, y no hay mensaje de error, si devuelve .f., hay mensaje de error.
Si devuelve .T. es lo mismo que devuelva 1, un número positivo, "salta" tantos controles "enfocables" más adelante como se indica con el numero, un número negativo, salta tantos controles "enfocables" hacia atrás.
Hay funciones o propiedades que te permiten detectar el número de control (creo que tabindex)
El * delante de Error, When, etc. indica que esos eventos éstan latentes (activos), mientras el formulario exista y el textbox pueda recibir el foco. Esto funciona también para otros controles que puedan modificar su contenido (tengan propiedad value) o equivalente.
En el valid, no se puede hacer un setfocus, porque estás saliendo del textbox por la "ventana" (la lógica de ciclo de eventos de vfp, exige que de un control se salga al hacer el return de un valid, y el setfocus, lo está haciendo antes del return.
Además están todos estos otros:
Eventos Raton: Click, DblClick, DragDrop, DragOver, MiddleClick, MouseDown, MouseEnter, MouseLeave, MouseMove, MouseUp, MouseWheel, RightClick
Para compatibilidad hacia atras (No usar): ErrorMessage, Message
Drag and Drop de elementos OLE (nunca los use): OLECompleteDrag, OLEDragDrop, OLEDragOver, OLEGiveFeedBack, OLESetData, OLEStartDrag
Estos no los aplique nunca en textbox: RangeHigh, RangeLow
Para todos los controles modificables (textbox, editbox, etc.) cree una clase derivada, donde en el gotfocus guardaba el valor del control al entrar, y en el lostfocus, comparaba el valor actual con el guardado, si eran diferentes, invocaba un método del formulario (también creado de una clase base) que habilitaba por ejemplo el botón de guardar.
Espero sirva de resumen.
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad.
Que la Fuerza los acompañe, hasta perder el focus y más allá