VB.Net - TextBox, limiter saisie aux chiffres

Septembre 2016

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



Exemple 1


Voici la façon la plus "simple" pour limiter la saisie :
  • 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 que la solution 1 n'est pas des plus souples pour l'utilisateur.
En effet, la frappe du séparateur décimal est conditionné 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 changé le point du clavier décimal en virgule (s'il faut une virgule).
L'avantage de cette deuxième solution : l'utilisateur peut taper, au choix, un point ou une virgule, le code rectifie en fonction du PC.
  • Ajouter un deuxième formulaire 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

A voir également :

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.