none
Comment bloquer les caractères alphabétiques dans un champ pour écrire seulement les chiffres? RRS feed

  • Question

  • Salut tout le monde,

    j'ai fais un formulaire Windows Form et je voudrais bloquer les caractères alphabétiques du clavier pour que l'utilisateur puisse seulement écrire les Chiffres et espacement dans un champ donné dont voici un exemple de code:

    Private Sub (expéditeur de ByVal comme System.Object, ByVal e As System.EventArgs) txtnomgrp_TextChanged Poignées txtnomgrp.TextChanged
    End Sub

    mardi 15 juillet 2014 10:51

Réponses

  • Bonjour,

    Je vous ai préparé un petit POC avec la solution que je vous donnais au dessus.

    Vous pouvez la télécharger ici.

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    • Marqué comme réponse onesatforever jeudi 17 juillet 2014 16:22
    jeudi 17 juillet 2014 13:16

Toutes les réponses

  • Bonjour, 

    Vous pouvez vous inspirer de ce post qui vous donner les meilleures indications : 

    http://msdn.microsoft.com/en-us/library/ms229644(v=vs.80).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

    Cordialement, 


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mardi 15 juillet 2014 11:20
  • Ok j'ai vu le lien et j'ai essayé de l'intégrer dans mon code mais il y a eu cette erreur:

    Erreur 1 Type 'NumberFormatInfo' non défini. 


    onesat

    mardi 15 juillet 2014 12:52
  • Bonjour, 

    Avez-vous déclaré votre variable numberFormatInfo comme présenté dans le post ?


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mardi 15 juillet 2014 13:05
  • Oui et dans l'option de correction on me suggère de Mofifez "NumberFormatInfo" en "Globalization.numberFormatInfo".

    onesat

    mardi 15 juillet 2014 13:11
  • Effectivement cela ne me semble pas anormal.

    Pour corriger cela ajouter la ligne d'import suivant : 

    Imports System.Globalization

    Ensuite, la ligne corrigée est donc : 

     Dim numberFormatInfo As NumberFormatInfo = CultureInfo.CurrentCulture.NumberFormat

    Cordialement, 


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mardi 15 juillet 2014 13:23
  • Ok le code fonctionne maintenant sans erreur seulement je n'arrive pas à l'adapter sur mon champ de saisie par contre il crée son propre champ de saisie!

    onesat

    mardi 15 juillet 2014 13:33
  • Voici le reste du code de mon formulaire:

    Imports System.Data.SqlClient
    Public Class Form1
        Dim con As New SqlConnection
        Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            con.Open()
            Dim cmd As New SqlCommand(("INSERT INTO groupes_utilisateurs VALUES('" & txtid.Text & "', '" & txtnomgrp.Text & "')"), con)
            cmd.ExecuteNonQuery()
            con.Close()
            MsgBox("Success....", MsgBoxStyle.Information, "SUCCESS")
            txtid.Clear()
            txtnomgrp.Clear()
            txtid.Focus()
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            con.ConnectionString = "Data Source=WIN-DCM2QL793CF;Initial Catalog=mapharmaciedb;Integrated Security=True"
        End Sub
    
        Private Sub txtnomgrp_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtnomgrp.TextChanged
    
        End Sub
    End Class
    
    C'est un formulaire avec deux champs et je voudrais que le deuxième champ ne puisse prendre que les caractères numériques le lien de BEAUGRAND Kevin  est très intéressant seulement je n'arrive pas à l'adapter! Donc s'ils vous un coup de pouce encore!

    onesat

    mardi 15 juillet 2014 14:04
  • Re-Bonjour,

    Si vous avez utilisé le code présenté dans le liens, il vous suffit simmplement de changer le type de votre textBox en NumericTextBox (le type que vous venez de créer en copié/collant le code de l'article. Vous n'aurez rien d'autre à faire.

    Cordialement, 


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mardi 15 juillet 2014 14:14
  • un peu de code please! Suis débutant en vb.net

    onesat

    mardi 15 juillet 2014 14:39
  • bonjour,

    Vous voulez bloquer les caractères alphabétiques du clavier pour que l'utilisateur puisse seulement écrire les Chiffres :

    Voici la solution :

    Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            If Not Char.IsControl(e.KeyChar) AndAlso Not IsNumeric(e.KeyChar) AndAlso e.KeyChar <> "."c Then
                e.Handled = True
                MessageBox.Show("Valeur numérique uniquement !")
            End If

    je sais pas si çà réponds a ta question?

    CORDIALEMENT,

    mercredi 16 juillet 2014 14:27
  • Désolé,

    Je croyais pourtant avoir répondu avec un peu de code. Malheureusement je n'en ai pas vraiment mais effectuez ceci :  

    • Une fois que vous avez intégré le code issu de l'article de MSDN.
    • Lancez la compilation de votre solution.
    • Ensuite revenez sur le designer de votre formulaire VB.NET.
    • Dans la toolbox, devrait apparaître le NumericTextBox. Vous n'aurez plus qu'a le glisser/déposer dans votre formulaire et supprimer l'ancien Textbox.


    Cordialement, 


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mercredi 16 juillet 2014 14:54
  • Bon j'ai créer un nouveau formulaire juste pour tester dont voici le code:

    Imports System.Globalization
    Public Class NumericTextBox
        Inherits TextBox
        Private SpaceOK As Boolean = False
    
        ' Restricts the entry of characters to digits (including hex),
        ' the negative sign, the e decimal point, and editing keystrokes (backspace).
        Protected Overrides Sub OnKeyPress(ByVal e As KeyPressEventArgs)
            MyBase.OnKeyPress(e)
    
            Dim numberFormatInfo As NumberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat
            Dim decimalSeparator As String = numberFormatInfo.NumberDecimalSeparator
            Dim groupSeparator As String = numberFormatInfo.NumberGroupSeparator
            Dim negativeSign As String = numberFormatInfo.NegativeSign
    
            Dim keyInput As String = e.KeyChar.ToString()
    
            If [Char].IsDigit(e.KeyChar) Then
                ' Digits are OK
            ElseIf keyInput.Equals(decimalSeparator) OrElse keyInput.Equals(groupSeparator) OrElse keyInput.Equals(negativeSign) Then
                ' Decimal separator is OK
            ElseIf e.KeyChar = vbBack Then
                ' Backspace key is OK
                '    else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0)
                '    {
                '     // Let the edit control handle control and alt key combinations
                '    }
            ElseIf Me.SpaceOK AndAlso e.KeyChar = " "c Then
    
            Else
                ' Swallow this invalid key and beep
                e.Handled = True
            End If
    
        End Sub
    
    
        Public ReadOnly Property IntValue() As Integer
            Get
                Return Int32.Parse(Me.Text)
            End Get
        End Property
    
    
        Public ReadOnly Property DecimalValue() As Decimal
            Get
                Return [Decimal].Parse(Me.Text)
            End Get
        End Property
    
    
        Public Property AllowSpace() As Boolean
    
            Get
                Return Me.SpaceOK
            End Get
            Set(ByVal value As Boolean)
                Me.SpaceOK = value
            End Set
        End Property
    
        Private Sub InitializeComponent()
            Me.SuspendLayout()
            Me.ResumeLayout(False)
    
        End Sub
    End Class
    
    Public Class Form2
    
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ' Create an instance of NumericTextBox.
            Dim NumericTextBox1 As NumericTextBox = New NumericTextBox()
            NumericTextBox1.Parent = Me
    
    
            ' Draw the bounds of the NumericTextBox.
            NumericTextBox1.Bounds = New Rectangle(5, 5, 150, 100)
        End Sub
    End Class

    Et quand je bascule mode design de mon formulaire j'ai cet aperçu:

    Et je ne vois pas non plus NumericTextBox dans la toolbox!


    onesat

    jeudi 17 juillet 2014 13:04
  • Bonjour,

    Je vous ai préparé un petit POC avec la solution que je vous donnais au dessus.

    Vous pouvez la télécharger ici.

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    • Marqué comme réponse onesatforever jeudi 17 juillet 2014 16:22
    jeudi 17 juillet 2014 13:16
  • Ouf il y a un petit soucis de compatibilité! Je travail sous Visual Studio 2010!!


    onesat

    jeudi 17 juillet 2014 13:53
  • Oups.

    Dans ce cas là, créez un nouveau projet vide (ou supprimez les fichiers de votre projet actuel. et ajoutez les fichiers suivants :

    • Form1.Designer.vb
    • Form1.resx
    • Form1.vb
    • NumericTextBox.vb

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    jeudi 17 juillet 2014 13:59
  • Encore un coup de pouce! J'ai beaucoup fouiller mais je vois du tout comment ajouter ces fichiers dans mon projet!?

    onesat

    jeudi 17 juillet 2014 14:34
  • Bonjour,

    Voila le liens explicatif pour ajouter des fichiers à un projet :

    http://msdn.microsoft.com/fr-fr/library/vstudio/9f4t9t92(v=vs.100).aspx

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    jeudi 17 juillet 2014 14:52
  • Ok cool! j'ai pu ajouter les fichiers à mon projet mais je vais préciser quelques pour ce qui seront confronter a ce genre de situation prochainement! Après l'ajout de fichiers il faut remplacer le nom du projet du code extérieur par celui du projet présent!

    Et après ce petit changement sa fonctionne normalement! Merci beaucoup!


    onesat

    jeudi 17 juillet 2014 16:21