2016-10-13 2 views
0

J'ai une zone de texte dans VB qui est configurée pour n'accepter que des données numériques, et cela fonctionne, sauf dans DEUX cas spécifiques.VB Text Box acceptant des données non numériques

Si l'utilisateur fournit une la zone de texte NON NUMERIC CHAR auto efface,

Cependant, si l'utilisateur d'abord un numéro, puis fournit soit « - » ou « + »

La zone de texte Acceptez ceci comme une entrée valide.

Lorsque l'utilisateur tape un plus ombles de tout type, à savoir le numéro ou char

Ensuite, la zone de texte « réalise » et la volonté de soi claire. Je me demandais si cela est dû à la façon dont VB stocke les caractères '-' et '+'?

Le meilleur moyen de contourner ce problème consiste-t-il simplement à ajouter les deux exceptions, c'est-à-dire si '-' ou '+' sont saisis, alors l'auto-effacement?

Ou existe-t-il une solution plus élégante?

Merci.

code:

Private Sub TextBox1_Change() 

'Textval used as variable from user input 
'Numval becomes textval providing the user input is numerical 

Dim textval As String 
Dim numval As String 

    textval = TextBox1.Text 
    If IsNumeric(textval) Then 
    numval = textval 
    Else 
    TextBox1.Text = CStr(numval) 
    End If 
End Sub 
+0

[** Cette **] (http://stackoverflow.com/questions/15423114/checking-to-see-if-text-box-input-is-numeric?rq=1) vaut peut-être la peine d'être lu car c'est peut-être ce que vous cherchez. – Codexer

+0

L'utilisation d'une zone de texte masquée pourrait constituer une solution alternative à ce qui a été suggéré. –

Répondre

-2

Vous devez essayer d'analyser l'entrée pour permettre uniquement ce que vous voulez. Si l'analyse est un succès laissez le champ seul sinon effacer le texte du contrôle ...

Private Sub TextBox1_Change() 
    Dim intVal As Integer = 0 
    If Not Integer.TryParse(TextBox1.Text, intVal) Then 
     TextBox1.Text = String.Empty 
    End If 
End Sub 

Cela ne permet un type Integer, des caractères non alpha ...

0

Code vb.net :

If Asc(e.KeyChar) <> 13 AndAlso Asc(e.KeyChar) <> 8 AndAlso Not IsNumeric(e.KeyChar) Then 
' your code here 
    e.Handled = True 

End If

et vous pouvez remplacer le texte: Code:

Text = Text.Replace("string", "replace_by_this_string") 
+0

Et d'où vient-il l'argument 'e' dans le code que vous avez fourni? Sur une autre note, votre exemple de remplacement n'est pas pertinent dans son ensemble, n'a rien à voir avec sa question. – Codexer

0

Si le programme demande à l'utilisateur de saisir uniquement les données numériques pour la zone de texte, vous devez appliquer la restriction lorsque l'utilisateur appuie sur une touche

Utilisez événement KeyDown de la zone de texte:

'Omitting the parameters and Handles keyword 
Private Sub textbox_KeyDown() 
    'Set the keys you would want to allow in this array 
    Dim allowedkeys As Keys() = {Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9, Keys.D0, Keys.Back} 

    For i = 0 To allowedkeys.Length - 1 'Iterate through the allowed keys array 
     If e.KeyCode = allowedkeys(i) Then 'If the key pressed is present in the array... 
      Exit Sub 'The check returned a success. Exit and accept the key 
     End If 
    Next 
    e.SuppressKeyPress = True 'Supress all keys that failed the check 
End Sub 

Don » t oublier d'ajouter plus de clés dont vous avez besoin! La touche Espace, les touches du pavé numérique, les touches point (point)?

De cette façon, vous pouvez supprimer le contrôle en cas Changed et aller directement à numval = textval

Ou pour les programmeurs paresseux, numval = TextBox1.Text et numval = Val(TextBox1.Text) travaillé aussi bien