VB.Net - TextBox, limiter saisie aux chiffres
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.NetServeur 1 : saisir uniquement nombre.zip
A découvrir aussi
- [VB.Net] Rechercher un fichier sur un DD
- VB.Net - Minuterie polyvalente
- Comment bien stocker et vérifier un mot de passe
Retour aux articles de la catégorie Programmation -
⨯
Inscrivez-vous au blog
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 2 autres membres