Quiero hacer un control TextBox que solo acepte valores numéricos.Permitir solo valores numéricos en el cuadro de texto
¿Cómo puedo hacer esto en VB6?
Quiero hacer un control TextBox que solo acepte valores numéricos.Permitir solo valores numéricos en el cuadro de texto
¿Cómo puedo hacer esto en VB6?
En el texto del cuadro de texto Change
, compruebe si el valor introducido es un número. Si no es un número, vuelva a establecer el valor anterior.
Dim textval As String
Dim numval As String
Private Sub TextBox1_Change()
textval = TextBox1.Text
If IsNumeric(textval) Then
numval = textval
Else
TextBox1.Text = CStr(numval)
End If
End Sub
mira esto:
http://www.vbforums.com/showthread.php?t=350067
Es necesario comprobar cada pulsación de tecla, o se puede hacer una validación al final.
Haga clic derecho en el cuadro de control> componente> Control -> Microsoft Masked Edit Control 6.0.
O con el cuadro de texto normales:
Private Sub Text1_Validate(Cancel As Boolean)
Cancel = Not IsNumeric(Text1.Text)
End Sub
que vamos a la API que lo haga por mí. Agrego esta función a un módulo .bas y lo llamo para cualquier control de edición que necesite establecer en numérico solamente.
Option Explicit
Private Const ES_NUMBER = &H2000&
Private Const GWL_STYLE = (-16)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'set an editbox to numeric only - return the previous
'style on success or zero on error
Public Function ForceNumeric(ByVal EditControlhWnd As Long) As Long
Dim lngCurStyle As Long
Dim lngReturn As Long
lngCurStyle = GetWindowLong(EditControlhWnd, GWL_STYLE)
If lngCurStyle <> 0 Then
lngReturn = SetWindowLong(EditControlhWnd, GWL_STYLE, lngCurStyle Or ES_NUMBER)
End If
ForceNumeric = lngReturn
End Function
Para usarlo, llame a la función con el control del TextBox.
Private Sub Form_Load()
Dim lngResult As Long
lngResult = ForceNumeric(Text1.hwnd)
End Sub
Esto tiene sus problemas, sin embargo. Puede copiar cualquier texto no numérico y pegarlo en el control mediante (1) Ctrl-V, (2) Shift-Insert y (3) el menú contextual del cuadro de texto. Solo (1) puede abordarse en VB6 a través de KeyPress. – Herb
@Herb, está en lo correcto, pero la única forma de evitar que se peguen valores no válidos en un cuadro de texto en VB es capturar los mensajes del sistema. Es posible, pero algo feo de hacer en VB6. Esto solo evita escribir en un valor no numérico. Si necesito asegurar la integridad de mis datos, verifico si el texto es válido antes de usarlo para procesarlo. Mientras tanto, he dificultado que el usuario ingrese datos no válidos. En .Net, combino esto con la supervisión del flujo de mensajes para WM_PASTE (creo) e inspecciono la información que se pegará antes de permitirlo. – jac
que suelen utilizar este código:
Private Sub text1_KeyPress(KeyAscii As Integer)
If Not IsNumeric(text1.Text & Chr(KeyAscii)) And Not KeyAscii = 8 Then KeyAscii = 0
End Sub
Lo siguiente puede ser utilizado para los números enteros:
Private Sub text1_KeyPress(KeyAscii As Integer)
If Not IsNumeric(text1.Text & Chr(KeyAscii)) And Not KeyAscii = 8 Then KeyAscii = 0
if (KeyAscii>=43) and (KeyAscii<=46) Then KeyAscii = 0
'it ignores '-', '+', '.' and ','
End Sub
normalmente utilizo este código:
Private Sub text1_KeyPress(KeyAscii As Integer)
If Not IsNumeric(Chr(KeyAscii)) And Not KeyAscii = 8 Then
KeyAscii = 0
End If
End Sub
Esperanza esto ayuda.
If Len(Text2.Text) > 0 Then
If IsNumeric(Text2.Text) = False Then
Text2.SetFocus
CreateObject("WScript.Shell").SendKeys "{BACKSPACE}"
End If
End If
probar este código:
Private Sub Text1_Change()
textval = Text1.Text
If IsNumeric(textval) Then
numval = textval
Else
Text1.Text = CStr(numval)
End If
End Sub
Se prefiere utilizar evento Validate. – pinichi
Depende. Debería usar el evento 'Validate' si desea que se active la verificación de que solo se ingresaron los números cuando el usuario deja el control de la caja de texto e intenta establecer el foco en otra cosa. Si sigue esa ruta, entonces y solo entonces se presentará un error o notificación. Por otro lado, si usa el evento 'Change', se notificará al usuario inmediatamente que un valor no numérico que ingresaron no es válido. –