Formater un textbox (n'accepter que des chiffres)

Contenu du snippet

Dans VB, le contrôle ListBox ne possède pas de propriété Format (dommage!).
Si l'on veut que ce contrôle n'accepte que des entrées numériques, il faut jouer sur l'événement 'Change' du contrôle. On peut aussi utiliser le contrôle Masked Edit Control de Microsoft (MSMASK32.OCX)... Mais j'aime pas trop les OCX !
Je propose ici une méthode via API pour formater un TextBox qui n'acceptera que des entrées numériques... (A coller dans un module)

Source / Exemple :


'DECLARATION API
Public Declare Function GetWindowLong Lib "user32" _
   Alias "GetWindowLongA" _
   (ByVal hwnd As Long, _
    ByVal nIndex As Long) As Long

Public Declare Function SetWindowLong Lib "user32" _
    Alias "SetWindowLongA" _
    (ByVal hwnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long

'DECLARATION CONSTANTES
Public Const GWL_STYLE As Long = -16&
Public Const ES_NUMBER = &H2000&

Public Sub SetNumber(NumberText As TextBox, Flag As Boolean)
    Dim curstyle As Long, newstyle As Long

    'Récupère le style
    curstyle = GetWindowLong(NumberText.hwnd, GWL_STYLE)

    If Flag Then
       curstyle = curstyle Or ES_NUMBER
    Else
       curstyle = curstyle And (Not ES_NUMBER)
    End If

    'Attribue le nouveau style
    newstyle = SetWindowLong(NumberText.hwnd, GWL_STYLE, curstyle)
    'Rafraîchi
    NumberText.Refresh
End Sub

Conclusion :


Utilisation:
'Appliquer le format numérique
SetNumber Me.MonTextBox, True
'Enlever le format numérique
SetNumber Me.MonTextBox, False

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.