Mucha gente desea saber si es un bug de los controles TextBox, y cómo evitarlo. Aquí veremos la explicación sobre el tema.
No es un error, es el comportamiento normal de VFP, y tanto no es un error que puedes cambiarlo, para esto, puedes codificar lo siguiente en el evento KeyPress de tu clase TextBox personalizada (que así lo deberíamos tener todos):
IF nKeyCode = 127 AND (LEN(ALLTRIM(this.Value))-1 < 0) NODEFAULT ENDIF
Un pequeño código para probarlo:
oForm = CREATEOBJECT("MyForm")
oForm.Show(1)
DEFINE CLASS myForm AS Form
ADD OBJECT TextBox1 AS MyTextBox WITH Top=20, Width=150, Height= 25
ADD OBJECT TextBox2 AS MyTextBox WITH Top=50, Width=150, Height= 25
PROCEDURE Init
SET CONFIRM ON
lcMessage = "Escriba un texto en las cajas, borre el contenido con BackSpace"+;
CHR(13)+"Verá el comportamiento cambiado"
MESSAGEBOX(lcMessage,64,"Aviso")
ENDPROC
ENDDEFINE
DEFINE CLASS myTextBox AS TextBox
PROCEDURE KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode = 127 AND (LEN(ALLTRIM(this.Value))-1 < 0)
NODEFAULT
ENDIF
ENDDEFINE
El mismo ejemplo, pero usando BindEvents ( a partir de VFP8):
oForm = CREATEOBJECT("MyForm")
oForm.Show(1)
DEFINE CLASS myForm AS Form
ADD OBJECT TextBox1 AS TextBox WITH Top=20, Width=150, Height= 25
ADD OBJECT TextBox2 AS TextBox WITH Top=50, Width=150, Height= 25
PROCEDURE Init
SET CONFIRM ON
lcMessage = "Escriba un texto en las cajas, borre el contenido con BackSpace"+;
CHR(13)+"Verá el comportamiento cambiado"
MESSAGEBOX(lcMessage,64,"Aviso")
FOR EACH oControl IN This.Controls
IF oControl.BaseClass = 'Textbox'
BINDEVENT(oControl, 'KeyPress',This,'MyKeyPress')
ENDIF
ENDFOR
ENDPROC
PROCEDURE myKeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF AEVENTS(laControl,0) > 0
IF nKeyCode = 127 AND (LEN(ALLTRIM(laControl[1].Value))-1 < 0)
NODEFAULT
ENDIF
ENDIF
ENDPROC
ENDDEFINE
Nota: Para ejecutar los códigos anteriores basta con copiar y pegarlos en tu command window, seleccionar lo y presionar ENTER. Verás como el comportamiento ha cambiado.
Espero les sea de utilidad.
Esparta Palma
Excelente aporte.
ResponderBorrarJusto lo que necesitaba, De maravilla, saludos
ResponderBorrar