8
votes

Autoriser uniquement les valeurs numériques dans la zone de texte

Je veux faire un contrôle de zone de texte qui accepte uniquement des valeurs numériques.

Comment puis-je faire cela dans VB6?


0 commentaires

12 Réponses :



6
votes

Dans la zone de texte Texte Modifier l'événement CODE>, vérifiez si la valeur entrée est un nombre. Si ce n'est pas un numéro, réglez à nouveau l'ancienne valeur.

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


2 commentaires

Vous utilisez plutôt un événement de validation.


Ça dépend. Vous devez utiliser l'événement Valider si vous souhaitez que la vérification que seuls les numéros ont été entrés pour être déclenchés lorsque l'utilisateur quitte le contrôle de la zone de texte et essaie de définir la mise au point sur autre chose. Si vous allez cette route, alors et seulement une erreur ou une notification sera présentée. D'autre part, si vous utilisez l'événement modifier , l'utilisateur sera notifié immédiatement qu'une valeur non numérique utilisée est invalide.



9
votes

Cliquez avec le bouton droit de la souris sur la boîte de contrôle> Composant> Contrôle -> Contrôle d'édition Microsoft masqué 6.0.
Ou avec une zone de texte normale:
xxx


0 commentaires

3
votes

Je laisse l'API le faire pour moi. J'ajoute cette fonction à un module .bas et appelez-le pour n'importe quel contrôle d'édition que je dois définir uniquement sur numérique uniquement.

Private Sub Form_Load()
    Dim lngResult As Long

    lngResult = ForceNumeric(Text1.hwnd)

End Sub


2 commentaires

Cela a cependant ses problèmes. Vous pouvez copier tout texte nonnumérique et collez-le dans la commande via (1) CTRL-V, (2) SHIFT-INSERT, et (3) le menu contextuel de la zone de texte. Seuls (1) peuvent être adressés dans VB6 via KeyPress.


@Herb, vous êtes correct, mais le seul moyen d'éviter de coller des valeurs non valides dans une zone de texte dans VB consiste à capturer les messages système. C'est possible, mais une chose laide à faire dans VB6. Cela n'empêche que taper une valeur non numérique. Si j'ai besoin d'assurer mon intégrité de données, je vérifie que le texte est valide avant que je l'utilise pour le traitement. En attendant, j'ai rendu plus difficile l'utilisateur de saisir des données non valides. Dans .net, je combine ceci avec la surveillance du flux de messages pour wm_paste (je pense) et inspecte les informations à coller avant de le laisser.



3
votes

J'utilise habituellement ce code:

Private Sub text1_KeyPress(KeyAscii As Integer)
    If Not IsNumeric(text1.Text & Chr(KeyAscii)) And Not KeyAscii = 8 Then KeyAscii = 0
End Sub


0 commentaires

0
votes

Les éléments suivants peuvent être utilisés pour des nombres entiers: xxx


0 commentaires

2
votes

J'utilise habituellement ce code: xxx

espère que cela aide.


0 commentaires

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

0 commentaires

0
votes

Essayez ce code:

Private Sub Text1_Change()
    textval = Text1.Text
    If IsNumeric(textval) Then
        numval = textval
    Else
        Text1.Text = CStr(numval)
    End If
End Sub


0 commentaires

1
votes

J'ai utilisé ce code dans mon projet:

Private Sub txtReceiptID_KeyPress(KeyAscii As Integer)
Dim Keychar As String
If KeyAscii > 31 Then
    Keychar = Chr(KeyAscii)
    If Not IsNumeric(Keychar) Then
        KeyAscii = 0
    End If
End If


0 commentaires

-1
votes

Essayez ce code: désactive la lettre (A-Z, A-Z) et accepte le retour arrière, les points, les virgules et les chiffres (0-9) =)
de
Sous-texte privé1_KeyPress (keascii comme entier)
Si non (Keyascii> = vbkeya et keascii <= vbkeyz) et non (Keyascii> = 97 et keascii <= 122), alors Sinon
Keascii = 0
Fin si

Fin sous


1 commentaires

La question a été répondue il y a 8 ans et votre code n'a pas de formatage rendant difficile à lire. S'il vous plaît essayez de répondre à de nouvelles questions sans réponse et de questions anciennes qui ont déjà accepté des réponses.



0
votes


1 commentaires

Souhaitez-vous ajouter une explication à votre réponse uniquement à COCE? Cela aiderait à combattre la mauvaise idée que Stackoverflow est un service de rédaction de code gratuit.