Les Allergies
Alimentaires

VB.Net - TextBox, limiter saisie aux chiffres


Deux exemples pour limiter la saise aux chiffres, dans un textbox, en tenant compte du séparateur décimal du PC hôte.


Exemple 1


La façon la plus "simple" pour limiter la saisie est présentée ci-dessous.
  • Ouvrir un nouveau projet Windows Forms
  • Sur la form, collez
    • Un textBox
    • Un label
    • Un bouton

Et collez ce code dans...
Public Class Form1  
  Dim Sep As Char  
  Dim Nombre As Double  

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
    Nombre = CDbl(TextBox1.Text)  
    Label1.Text = Nombre  
  End Sub  

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  
    'Détecter le séparateur décimale de l'application.  
    Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator  
    TextBox1.Focus()  
  End Sub  

  Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress  
    If Not (Char.IsNumber(e.KeyChar) Or e.KeyChar.Equals(Sep) Or Char.IsControl(e.KeyChar)) Then e.Handled = True  
  End Sub  
End Class

Exemple 2


Toutefois, je trouve qie la solution 1 n'est pas des plus souple pour l'utilisateur.
En effet, la frappe du séparateur décimale est conditionnée par la configuration du PC hôte, cela pourrait entraîner, par exemple de taper la virgule du clavier alphanumérique si l'appli n'a pas changer le point du clavier décimal en virgule (s'il faut une virgule).
L'avantage de cette deuxième solution : l'utilisateur peu taper au choix, un point ou une virgule, le code rectifie en fonction du PC.
  • Ajouter une deuxième form avec les mêmes composants.
  • Collez le code dans ...

Public Class Form2  
  Dim Sep As Char  
  Dim Nombre As Double  

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
    Applique()  
  End Sub  

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  
    'Détecter le séparateur décimale de l'application.  
    Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator  
  End Sub  

  Private Sub Data_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Data.KeyDown  
    If e.KeyCode = 13 Then  
      Applique()  
    End If  
  End Sub  

  Private Sub Data_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Data.TextChanged  
    If Data.Text = Sep Then  
      'si le séparateur décimal est taper directement  
      Data.Text = "0" & Sep  
      Data.SelectionStart = Len(Data.Text)  
    ElseIf Not IsNumeric(Trim(Data.Text)) Then  
      Beep()  
      If Len(Data.Text) < 1 Then  
        Data.Text = ""  
      Else  
        Data.Text = Microsoft.VisualBasic.Left(Data.Text, Len(Data.Text) - 1)  
        Data.SelectionStart = Len(Data.Text)  
      End If  
    End If  
  End Sub  
  Sub Applique()  
    Dim DT As String  
    'Pour adapter à la configuration du PC hôte.  
    DT = Replace(Data.Text, ".", Sep)  
    DT = Replace(DT, ",", Sep)  
    Label1.Text = CDbl(DT)  
    On Error Resume Next  
    Data.SelectionStart = 0  
    Data.SelectionLength = Len(Data.Text)  
    Data.Focus()  
  End Sub  
End Class

Télécharger


Vous pouvez télécharger la solution VB.Net
Serveur 1 : saisir uniquement nombre.zip
Publié par lermite222 - Dernière mise à jour le 15 mai 2012 à 11:39 par lermite222
Ce document intitulé « VB.Net - TextBox, limiter saisie aux chiffres » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Suggestions
  •  VB.Net - TextBox, limiter saisie aux chiffres
  •  Lire ligne par ligne un fichier .TXT avec VB (Résolu) » Bonjour, J'essaye de faire un code en C++ sur Visual Basic 2010 Express mais j'ai récemment heurté un problème. J'aurais besoin de savoir comment afficher ligne par ligne (c'est a dire une ligne après l'autre a l'aide d'un Timer) le contenus d'un...
  •  [VB]Prob retour chariot dans txtbox (Résolu) » Meilleure réponse: Bonjour, Ca fait longtemps, je sais, et j'imagine que vous avez trouvé la réponse. Toutesfois, pour d'autres personnes qui seraient interessées: le retour de chariot est un vbCrLf, mais il faut impérativement que l'objet ait la propriét
  •  TextBox en C : position courante curseur? » Bonjour, Je fais de l interface graphique en C avec LabWindows/CVI et, dans une textBox, je cherche à recuperer la position courante du curseur (pour ajouter une ligne de texte a cet endroit precis). D'avance merci pour votre aide :-)
  •  Forcer format de saisie dans textbox ? » Meilleure réponse: Essaie ca Private Sub TextBox1_Change() Dim Val As Byte TextBox1.MaxLength = 10 'nb caractères maxi autorisé dans le textbox Val = Len(TextBox1) If Val = 2 Or Valeur = 5 Then TextBox1 = TextBox1 & "/" End Sub
  •  Vb.net+textbox+button » Bonjour, je suis etrain de realiser un programme vb.net 2003 ou je veux ecrire dans un textbox puis clicker entrer ,pour que le button ok s 'execute,sa veut dire la touche entrée jouera le role d une tabulation; merci de me repondre ,si vous avez de...
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
VBA.VB6 - Fonction d'arrondi Supp/Inférieur à n décimales
Programmation - Comment débuter, quel langage?