Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: Waldo en Octubre 14, 2014, 04:18:04 pm
-
Les dejo esta rutinita que sirve para que un TextBox acepte solo numeros (no acepta coma, ni punto) pero lo bueno es que deja pasar los tab, delete, backspace, etc. Y me parece mas sencilla que andar viendo el valor del ASCII ingresado.
'// TextBox solo numeros //
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = (-16)
Const ES_NUMBER = &H2000&
Public Sub TextBoxSoloNumeros(ByRef oTextBox As TextBox, Flag As Boolean)
Dim curstyle As Long, newstyle As Long
'retrieve the window style
curstyle = GetWindowLong(oTextBox.hWnd, GWL_STYLE)
If Flag Then
curstyle = curstyle Or ES_NUMBER
Else
curstyle = curstyle And (Not ES_NUMBER)
End If
'Set the new style
newstyle = SetWindowLong(oTextBox.hWnd, GWL_STYLE, curstyle)
'refresh
oTextBox.Refresh
End Sub
'Uso:
TextBoxSoloNumeros Text1, True
-
Gracias por el aporte amigo.
-
Les dejo esta rutinita que sirve para que un TextBox acepte solo numeros (no acepta coma, ni punto) pero lo bueno es que deja pasar los tab, delete, backspace, etc. Y me parece mas sencilla que andar viendo el valor del ASCII ingresado.
'// TextBox solo numeros //
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = (-16)
Const ES_NUMBER = &H2000&
Public Sub TextBoxSoloNumeros(ByRef oTextBox As TextBox, Flag As Boolean)
Dim curstyle As Long, newstyle As Long
'retrieve the window style
curstyle = GetWindowLong(oTextBox.hWnd, GWL_STYLE)
If Flag Then
curstyle = curstyle Or ES_NUMBER
Else
curstyle = curstyle And (Not ES_NUMBER)
End If
'Set the new style
newstyle = SetWindowLong(oTextBox.hWnd, GWL_STYLE, curstyle)
'refresh
oTextBox.Refresh
End Sub
'Uso:
TextBoxSoloNumeros Text1, True
No entiendo el uso , como se deberia implementar ?
-
Despues de llamar a
TextBoxSoloNumeros Text1, True
El textbox solo aceptará numeros! (Ojo, compruebalo igual, pueden pegar texto o alguna cosa así depende del windows.)
-
Yo uso un UC, original del master Yacosta creo, al que agregué unas cosillas, como la de validar el texto pegado, así deja solo números, solo texto, solo texto en mayusculas, solo texto en minusculas y solo numeros con formato millares... he tratado, infructuosamente ,que me permita ingresar fecha preformateada, como el maskedit, pero no lo he conseguido ni le he puesto mucho empeño a ello tampoco, (jeje), si alguno quiere y puede hacerlo se le agradecerá si lo comparte...
los Fuentes:
https://mega.co.nz/#!nEQBVLKS!iaYgNcdGGcrWb2EjPkj1y7FxzY67RKfx6IAbtGR_p-U (https://mega.co.nz/#!nEQBVLKS!iaYgNcdGGcrWb2EjPkj1y7FxzY67RKfx6IAbtGR_p-U)
Saludos cordiales
-
Despues de llamar a
TextBoxSoloNumeros Text1, True
El textbox solo aceptará numeros! (Ojo, compruebalo igual, pueden pegar texto o alguna cosa así depende del windows.)
Pero donde ubicacamos la funcion ? el CHANGE del textbox ?
gracias
-
Si permite los BackSpace, los Tab, Enter, etc, ha de ubicarse en el Evento Keypress de preferencia....
Saludos Cordiales
-
Pero donde ubicacamos la funcion ? el CHANGE del textbox ?
gracias
Sub Form Load
TextBoxSoloNumeros Text1, True
End Sub
Con solo llamar a esa linea en el load, te olvidas de controlar el change y los keypress, la api se encarga de hacer todo solita.