Je veux faire un contrôle de zone de texte qui accepte uniquement des valeurs numériques. P>
Comment puis-je faire cela dans VB6? P>
12 Réponses :
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
Vous utilisez plutôt un événement de validation.
Ça dépend. Vous devez utiliser l'événement Valider code> 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 code> modifier code>, l'utilisateur sera notifié immédiatement qu'une valeur non numérique utilisée est invalide.
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:
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
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.
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
Les éléments suivants peuvent être utilisés pour des nombres entiers:
J'utilise habituellement ce code: espère que cela aide. p> p>
If Len(Text2.Text) > 0 Then If IsNumeric(Text2.Text) = False Then Text2.SetFocus CreateObject("WScript.Shell").SendKeys "{BACKSPACE}" End If End If
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
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
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
Keascii = 0
Fin si
Fin sous p>
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.
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.