2010-12-22 26 views

Respuesta

5

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 
+0

Se prefiere utilizar evento Validate. – pinichi

+0

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. –

8

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 
3

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 
+0

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

+0

@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

0

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 
0

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 
0

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.

0
If Len(Text2.Text) > 0 Then 
    If IsNumeric(Text2.Text) = False Then 
     Text2.SetFocus 
     CreateObject("WScript.Shell").SendKeys "{BACKSPACE}" 
    End If 
End If 
0

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 
Cuestiones relacionadas