Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
26 septembre 2007 3 26 /09 /septembre /2007 10:30

Le séparateur numérique n'étant pas le même en france que dans les pays anglosaxons, il est nécessaire de filter la saisie des chiffres décimaux afin de transformer les "." (point) en "," (virgule).

Pour cet exemple, nous allons utiliser un DataGridView que l'on appellera dgvTarifs et dont nous allons gérer l'événement EditingControlShowing. Nous ne filtrerons la saisie que sur 2 colonnnes : coefTarif et prixVenteHT

 

Code :

Private Sub dgvTarifs_EditingControlShowing(ByVal sender As Object, ByVal e As  System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvTarifs.EditingControlShowing

        ' on récupère le control TextBox de la cellule qui est édité       

        Dim voControl As DataGridViewTextBoxEditingControl = Nothing voControl = CType(e.Control, DataGridViewTextBoxEditingControl)

                    Select Case Me.dgvTarifs.Columns(dgvTarifs.CurrentCell.ColumnIndex).Name
               ' si la colonne qui est éditée est coefTarif ou prixVenteHT alors on gère l'événement KeyPress du TextBox            

               Case "coefTarif", "prixVenteHT"

                   RemoveHandler voControl.KeyPress, AddressOf EditingControl_KeyPress

                   AddHandler voControl.KeyPress, AddressOf EditingControl_KeyPress
                Case Else
                    RemoveHandler voControl.KeyPress, AddressOf EditingControl_KeyPress
            End Select
  End Sub

    Private Sub EditingControl_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)

       ' on accepte que les caractères numériques, le point, ou la virgule       

       e.Handled = Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar) Or e.KeyChar = "." Or e.KeyChar = ",")

       ' on récupère le texte du TextBox

        Dim txt As String = CType(sender, DataGridViewTextBoxEditingControl).Text

        ' on s'assure que le point ou la virgule n'a été tapé qu'une fois

        If (InStr(txt, ".") > 0 Or InStr(txt, ",") > 0) And (e.KeyChar = "." Or e.KeyChar = ",") Then
            e.KeyChar = Nothing
        Else
           ' on remplace le point par une virgule ou la virgule par un point en fonction du séparateur décimal utilisé dans la culture en cours

            Dim vsDecimalSeparator As Char
            vsDecimalSeparator = CChar(System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator)

            If vsDecimalSeparator <> "." And e.KeyChar = "." Then
                e.KeyChar = vsDecimalSeparator
            End If
        End If

    End Sub

Partager cet article

Repost 0
Published by Cyril - dans VB.NET
commenter cet article

commentaires

Garcinia Cambogia Reviews 28/04/2014 11:20

Thanks for sharing the code for filtering enter numbers with decimal point in a cell! I tried this and it worked well without showing any errors! You should be very careful while copying the code, since a small mismatch may lead the program malfunction!

Gretchen 13/04/2011 19:52


Un grand merci, du tres bon travail 10/10


Nico 19/05/2010 14:08


Je tiens à te féliciter pour ce merveilleux code qui m'a débloqué dans la création d'un petit soft.
Merci encore et bonne continuation à toi


Cyril 19/05/2010 16:06



Très heureux que cela ait pu t'aider. Merci pour tes encouragements. 



Phantasie 30/12/2007 19:44

J'ai passé je ne sais combien de temps pour trouver comment faire ça.
Super code !!!
Merci

Cyril 30/12/2007 20:49

J'ai moi même mis du temps à trouver une solution convenable à ce problème. Heureux de voir que mon code a fait ton bonheur ;)