begin process at 2012 02 11 07:48:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Control

 > TEXTBOX NUMÉRIQUE

TEXTBOX NUMÉRIQUE


 Information sur la source

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Control Source .NET ( DotNet ) Classé sous :textbox, numérique Niveau :Débutant Date de création :04/06/2006 Vu :13 638

Auteur : GG29

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note


 Description

Ce textbox permet la saisie de nombre uniquement. Plusieurs options :
- nb de decimal
- symbole avant ou apres le nombre
- si on affiche les "0" inutile ou pas celon le nb de decimal


Source

  • Public Class Textbox_num
  • Inherits TextBox
  • #Region "Propriété"
  • #Region "My_NB_Decimal"
  • 'l'utilisateur peut choisir le nombre de decimal du nombre
  • Private _My_NB_Decimal As Integer
  • Property My_NB_decimal() As Integer
  • Get
  • Return _My_NB_Decimal
  • End Get
  • Set(ByVal value As Integer)
  • _My_NB_Decimal = value
  • End Set
  • End Property
  • #End Region
  • #Region "My_Symbole"
  • 'l'utilisateur peut choisir le symbole a afficher apres ou avant le nombre
  • Private _My_Symbole As String
  • Property My_Symbole() As String
  • Get
  • Return _My_Symbole
  • End Get
  • Set(ByVal value As String)
  • _My_Symbole = value
  • End Set
  • End Property
  • #End Region
  • #Region "My_Symbole_Place"
  • Enum Place
  • Avant 'le symbole se trouve avant le nombre
  • Apres 'le symbole se trouve apres le nombre
  • End Enum
  • Private _My_Symbole_Place As Place
  • Property My_Symbole_Place() As Place
  • Get
  • Return _My_Symbole_Place
  • End Get
  • Set(ByVal value As Place)
  • _My_Symbole_Place = value
  • End Set
  • End Property
  • #End Region
  • #Region "My_Affiche_0_Inutile"
  • Private _My_Affiche_0_Inutile As Boolean
  • Property My_Affiche_0_Inutile() As Boolean
  • Get
  • Return _My_Affiche_0_Inutile
  • End Get
  • Set(ByVal value As Boolean)
  • _My_Affiche_0_Inutile = value
  • End Set
  • End Property
  • #End Region
  • #End Region
  • #Region "Fonction"
  • #Region "Séparateur decimal"
  • Function My_separateur_decimal() As String
  • 'Pour avoir le séparateur decimal celon les paramètres utilisateurs
  • Return Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
  • End Function
  • #End Region
  • #Region "Partie du nombre"
  • Enum Partie
  • Entière 'retourne la partie entière du nombre
  • Décimal 'retourne la partie decimal du nombre
  • End Enum
  • 'renvoie la partie decimal ou entière, celon le choix, du nombre
  • Function My_NB_partie(ByVal nb As String, ByVal Part As Partie) As String
  • Try
  • If Trim(nb) = "" Then 'si il n'y a rien a retourner
  • nb = 0
  • Return nb
  • Exit Function
  • End If
  • nb = Replace(nb, My_Symbole, "")
  • Dim i As Integer 'pour la boucle
  • Dim chaine As String = "" 'a retourner
  • For i = 1 To nb.Length 'boucle testant caractère par caractère
  • Dim ch As String = Mid(nb, i, 1) 'extrait un caractère
  • If Part = Partie.Entière Then
  • If ch = My_separateur_decimal() Then
  • 'si on arrive à la partie décimal on quitte
  • Exit For
  • Else
  • 'autrement on ajoute le caractère
  • chaine &= ch
  • End If
  • ElseIf Part = Partie.Décimal Then
  • If ch = My_separateur_decimal() Then
  • chaine = ""
  • Else
  • chaine &= ch
  • End If
  • End If
  • Next
  • Return chaine
  • Catch ex As Exception
  • Return ""
  • End Try
  • End Function
  • #End Region
  • #Region "Compte le nombre d'occurence d'un caractère"
  • Function My_Compte_Char(ByVal charactere As String) As Integer
  • Dim nb As Integer = 0
  • If Trim(Me.Text) = "" Then
  • Return nb
  • Exit Function
  • End If
  • Dim i As Integer
  • For i = 1 To Me.Text.Length
  • Dim ch As String = Mid(Me.Text, i, 1)
  • If ch = charactere Then
  • nb += 1
  • End If
  • Next
  • Return nb
  • End Function
  • #End Region
  • #End Region
  • #Region "Méthode"
  • Private Sub textbox_numerique_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Enter
  • If Me.Text = "" Then Exit Sub 'si il n'y a rien
  • If _My_Symbole = "" Then Exit Sub 'si il n'y a pas de symbole a enlever
  • Me.Text = Replace(Me.Text, My_Symbole, "") 'on enlève le symbole
  • Me.Text = Trim(Me.Text) 'on enlève les espaces occasionnel
  • End Sub
  • Private Sub textbox_numerique_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
  • 'retour arrière -> on laisse faire donc on quitte la sub
  • If AscW(e.KeyChar) = 8 Then Exit Sub
  • 'si on appuie sur entrée on passe au controle suivant
  • If Asc(e.KeyChar) = 10 Or Asc(e.KeyChar) = 13 Then SendKeys.Send(vbTab)
  • 'si non numérique -> on empêche la saisie et on quitte
  • If Not (e.KeyChar = "0" OrElse e.KeyChar = "1" OrElse e.KeyChar = _
  • "2" OrElse e.KeyChar = "3" OrElse e.KeyChar = "4" OrElse e.KeyChar _
  • = "5" OrElse e.KeyChar = "6" OrElse e.KeyChar = "7" OrElse _
  • e.KeyChar = "8" OrElse e.KeyChar = "9" OrElse e.KeyChar = "." _
  • OrElse e.KeyChar = "," OrElse e.KeyChar = "-") Then
  • e.Handled = True
  • Exit Sub
  • End If
  • 'cas du "-"
  • If e.KeyChar = "-" Then
  • If My_Compte_Char("-") = 1 Then 'si il y en a deja un on quitte
  • e.Handled = True
  • Exit Sub
  • Else
  • If Not Me.SelectionStart = 0 Then 'si il n'est pas en première place pareil
  • e.Handled = True
  • Exit Sub
  • End If
  • End If
  • End If
  • 'cas du "." et ","
  • If e.KeyChar = "." OrElse e.KeyChar = "," Then
  • If My_NB_decimal = 0 Then 'si il n'y a pas de decimal on quitte
  • e.Handled = True
  • Exit Sub
  • End If
  • If My_Compte_Char(My_separateur_decimal) = 0 Then 'si il n'y a pas deja une virgule on laisse
  • e.KeyChar = My_separateur_decimal()
  • Exit Sub
  • Else
  • e.Handled = True 'autrement on quitte
  • Exit Sub
  • End If
  • End If
  • 'gestion du nombre de decimal
  • 'si c'est un nombre
  • If e.KeyChar = "0" OrElse e.KeyChar = "1" OrElse e.KeyChar = _
  • "2" OrElse e.KeyChar = "3" OrElse e.KeyChar = "4" OrElse e.KeyChar _
  • = "5" OrElse e.KeyChar = "6" OrElse e.KeyChar = "7" OrElse _
  • e.KeyChar = "8" OrElse e.KeyChar = "9" Then
  • 'si il n'y a pas de decimal ca sert à rien de compter
  • If My_NB_decimal = 0 Then
  • Exit Sub
  • End If
  • 'si il n'y a pas de virgule pareil
  • If My_Compte_Char(My_separateur_decimal) = 0 Then
  • Exit Sub
  • End If
  • Dim vir As Integer = InStr(Me.Text, My_separateur_decimal) 'place de la virgule
  • If vir > Me.SelectionStart Then 'si la virgule se trouve après l'endroit sélectionné
  • Exit Sub
  • Else 'autrement on empêche la saisie et on quitte
  • If My_NB_partie(Me.Text, Partie.Décimal).Length >= My_NB_decimal Then
  • e.Handled = True
  • Exit Sub
  • End If
  • End If
  • End If
  • End Sub
  • Private Sub Textbox_num_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.Validating
  • Try
  • If Me.Text = "" Then Exit Sub 'si il n'y a rien on quitte
  • Dim Text_Format As String = "#, ##0" 'format de depart
  • If Not My_NB_decimal = 0 Then 'si il y a des decimal
  • If My_Affiche_0_Inutile = True Then 'on affiche les 0 inutile
  • Dim i As Integer 'pour la boucle
  • Text_Format &= "."
  • For i = 1 To _My_NB_Decimal
  • Text_Format &= "0" 'on ajoute le nombre de 0 qu'il faut pour le format
  • Next
  • Else
  • Text_Format = "#, ##0.#"
  • End If
  • End If
  • If My_Symbole_Place = Place.Apres Then
  • Text_Format &= My_Symbole 'on ajoute le symbole après
  • Else
  • Text_Format = My_Symbole & Text_Format 'on ajoute le symbole avant
  • End If
  • Me.Text = Format(CDec(Me.Text), Text_Format) 'on met au format
  • Me.Text = Trim(Me.Text) 'on enlève les espaces occasionnel
  • Catch
  • #If DEBUG Then
  • MsgBox(Err.Number & vbNewLine & Err.Description)
  • #End If
  • End Try
  • End Sub
  • #End Region
  • End Class
Public Class Textbox_num
    Inherits TextBox

#Region "Propriété"
#Region "My_NB_Decimal"
    'l'utilisateur peut choisir le nombre de decimal du nombre
    Private _My_NB_Decimal As Integer
    Property My_NB_decimal() As Integer
        Get
            Return _My_NB_Decimal
        End Get
        Set(ByVal value As Integer)
            _My_NB_Decimal = value
        End Set
    End Property
#End Region
#Region "My_Symbole"
    'l'utilisateur peut choisir le symbole a afficher apres ou avant le nombre
    Private _My_Symbole As String
    Property My_Symbole() As String
        Get
            Return _My_Symbole
        End Get
        Set(ByVal value As String)
            _My_Symbole = value
        End Set
    End Property
#End Region
#Region "My_Symbole_Place"
    Enum Place
        Avant 'le symbole se trouve avant le nombre
        Apres 'le symbole se trouve apres le nombre
    End Enum
    Private _My_Symbole_Place As Place
    Property My_Symbole_Place() As Place
        Get
            Return _My_Symbole_Place
        End Get
        Set(ByVal value As Place)
            _My_Symbole_Place = value
        End Set
    End Property
#End Region
#Region "My_Affiche_0_Inutile"
    Private _My_Affiche_0_Inutile As Boolean
    Property My_Affiche_0_Inutile() As Boolean
        Get
            Return _My_Affiche_0_Inutile
        End Get
        Set(ByVal value As Boolean)
            _My_Affiche_0_Inutile = value
        End Set
    End Property
#End Region
#End Region
#Region "Fonction"
#Region "Séparateur decimal"
    Function My_separateur_decimal() As String
        'Pour avoir le séparateur decimal celon les paramètres utilisateurs
        Return Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
    End Function
#End Region
#Region "Partie du nombre"
    Enum Partie
        Entière 'retourne la partie entière du nombre
        Décimal 'retourne la partie decimal du nombre
    End Enum
    'renvoie la partie decimal ou entière, celon le choix, du nombre
    Function My_NB_partie(ByVal nb As String, ByVal Part As Partie) As String
        Try
            If Trim(nb) = "" Then 'si il n'y a rien a retourner
                nb = 0
                Return nb
                Exit Function
            End If
            nb = Replace(nb, My_Symbole, "")
            Dim i As Integer 'pour la boucle
            Dim chaine As String = "" 'a retourner
            For i = 1 To nb.Length 'boucle testant caractère par caractère
                Dim ch As String = Mid(nb, i, 1) 'extrait un caractère

                If Part = Partie.Entière Then
                    If ch = My_separateur_decimal() Then
                        'si on arrive à la partie décimal on quitte 
                        Exit For
                    Else
                        'autrement on ajoute le caractère
                        chaine &= ch
                    End If
                ElseIf Part = Partie.Décimal Then
                    If ch = My_separateur_decimal() Then
                        chaine = ""
                    Else
                        chaine &= ch
                    End If
                End If

            Next

            Return chaine
        Catch ex As Exception
            Return ""
        End Try
    End Function
#End Region
#Region "Compte le nombre d'occurence d'un caractère"
    Function My_Compte_Char(ByVal charactere As String) As Integer
        Dim nb As Integer = 0
        If Trim(Me.Text) = "" Then
            Return nb
            Exit Function
        End If
        Dim i As Integer
        For i = 1 To Me.Text.Length
            Dim ch As String = Mid(Me.Text, i, 1)
            If ch = charactere Then
                nb += 1
            End If
        Next
        Return nb
    End Function
#End Region
#End Region
#Region "Méthode"
    Private Sub textbox_numerique_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Enter
        If Me.Text = "" Then Exit Sub 'si il n'y a rien
        If _My_Symbole = "" Then Exit Sub 'si il n'y a pas de symbole a enlever
        Me.Text = Replace(Me.Text, My_Symbole, "") 'on enlève le symbole
        Me.Text = Trim(Me.Text) 'on enlève les espaces occasionnel
    End Sub
    Private Sub textbox_numerique_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        'retour arrière -> on laisse faire donc on quitte la sub
        If AscW(e.KeyChar) = 8 Then Exit Sub
        'si on appuie sur entrée on passe au controle suivant
        If Asc(e.KeyChar) = 10 Or Asc(e.KeyChar) = 13 Then SendKeys.Send(vbTab)
        'si non numérique -> on empêche la saisie et on quitte
        If Not (e.KeyChar = "0" OrElse e.KeyChar = "1" OrElse e.KeyChar = _
        "2" OrElse e.KeyChar = "3" OrElse e.KeyChar = "4" OrElse e.KeyChar _
        = "5" OrElse e.KeyChar = "6" OrElse e.KeyChar = "7" OrElse _
        e.KeyChar = "8" OrElse e.KeyChar = "9" OrElse e.KeyChar = "." _
        OrElse e.KeyChar = "," OrElse e.KeyChar = "-") Then
            e.Handled = True
            Exit Sub
        End If

        'cas du "-"
        If e.KeyChar = "-" Then
            If My_Compte_Char("-") = 1 Then 'si il y en a deja un on quitte
                e.Handled = True
                Exit Sub
            Else
                If Not Me.SelectionStart = 0 Then 'si il n'est pas en première place pareil
                    e.Handled = True
                    Exit Sub
                End If
            End If
        End If

        'cas du "." et ","
        If e.KeyChar = "." OrElse e.KeyChar = "," Then
            If My_NB_decimal = 0 Then 'si il n'y a pas de decimal on quitte
                e.Handled = True
                Exit Sub
            End If
            If My_Compte_Char(My_separateur_decimal) = 0 Then 'si il n'y a pas deja une virgule on laisse
                e.KeyChar = My_separateur_decimal()
                Exit Sub
            Else
                e.Handled = True 'autrement on quitte
                Exit Sub
            End If
        End If

        'gestion du nombre de decimal
        'si c'est un nombre
        If e.KeyChar = "0" OrElse e.KeyChar = "1" OrElse e.KeyChar = _
        "2" OrElse e.KeyChar = "3" OrElse e.KeyChar = "4" OrElse e.KeyChar _
        = "5" OrElse e.KeyChar = "6" OrElse e.KeyChar = "7" OrElse _
        e.KeyChar = "8" OrElse e.KeyChar = "9" Then

            'si il n'y a pas de decimal ca sert à rien de compter
            If My_NB_decimal = 0 Then
                Exit Sub
            End If

            'si il n'y a pas de virgule pareil
            If My_Compte_Char(My_separateur_decimal) = 0 Then
                Exit Sub
            End If

            Dim vir As Integer = InStr(Me.Text, My_separateur_decimal) 'place de la virgule
            If vir > Me.SelectionStart Then 'si la virgule se trouve après l'endroit sélectionné
                Exit Sub
            Else 'autrement on empêche la saisie et on quitte
                If My_NB_partie(Me.Text, Partie.Décimal).Length >= My_NB_decimal Then
                    e.Handled = True
                    Exit Sub
                End If
            End If
        End If
    End Sub
    Private Sub Textbox_num_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.Validating
        Try
            If Me.Text = "" Then Exit Sub 'si il n'y a rien on quitte
            Dim Text_Format As String = "#, ##0" 'format de depart
            If Not My_NB_decimal = 0 Then 'si il y a des decimal
                If My_Affiche_0_Inutile = True Then 'on affiche les 0 inutile
                    Dim i As Integer 'pour la boucle
                    Text_Format &= "."
                    For i = 1 To _My_NB_Decimal
                        Text_Format &= "0" 'on ajoute le nombre de 0 qu'il faut pour le format
                    Next
                Else
                    Text_Format = "#, ##0.#"
                End If
            End If
            If My_Symbole_Place = Place.Apres Then
                Text_Format &= My_Symbole 'on ajoute le symbole après 
            Else
                Text_Format = My_Symbole & Text_Format 'on ajoute le symbole avant
            End If
            Me.Text = Format(CDec(Me.Text), Text_Format) 'on met au format

            Me.Text = Trim(Me.Text) 'on enlève les espaces occasionnel
        Catch
#If DEBUG Then
            MsgBox(Err.Number & vbNewLine & Err.Description)
#End If
        End Try
    End Sub
#End Region


End Class

 Conclusion

comme d'habitude, n'hésitez pas à laisser des commentaire ou des idées d'amélioration.


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) TREEVIEW EXPLORER
Source avec Zip Source .NET (Dotnet) START AND STOP APPLICATION

 Sources de la même categorie

Source avec Zip COMMUNICATION MODBUS MASTER par sergelapointe
Source avec Zip Source avec une capture DÉPLACEMENT AVEC FLÈCHES DANS UN PAVÉ DE TEXTBOX 9X9 DYNAMIQ... par EhJoe
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLSTARS EN RÉPONSE À JAKNIGHT007 par bigboss9
Source avec Zip Source avec une capture Source .NET (Dotnet) CALENDRIER ANNUEL NORME ISO par Prog1001
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLE STARS par jaknight007

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture DÉPLACEMENT AVEC FLÈCHES DANS UN PAVÉ DE TEXTBOX 9X9 DYNAMIQ... par EhJoe
Source avec Zip PARAMETRES SETTINGS VBA par Le Pivert
Source .NET (Dotnet) [VB.NET] NUMERIXBOX - UNE TEXTBOX NUMÉRIQUE QUI GÈRE LES DÉC... par Benouille
FORMATER UN TEXTBOX (N'ACCEPTER QUE DES CHIFFRES) par Neo.balastik
TEXTBOX NUMERIQUE par GMI

Commentaires et avis

Commentaire de fred_gaou le 18/11/2008 01:35:01

Salut,

Je suis débutant et j'utilise "MS VB 2008 Express". Je ne sais pas comment utiliser ta source. J'ai essayé comme ceci:

- créer un nouveau projet "windows form application"
- project\add user control
- j'ajoute ton code à ce nouveau control et j'enregistre sous "Textbox_num.vb"
- je remarque que l'éditeur VB expose une erreur à "Inherits TextBox" me disant: "Base class 'system.windows.forms.textbox' specified for class 'Textbox_num' cannot be different from the base class 'system.windows.forms.UserControl' "

D'après les corrections qu'il propose, si je choisis "change class 'Textbox_num' to inherit from 'system.windows.forms.textbox'" j'ai des erreurs à l'ouverture du designer du control. J'ai fait des essais avec et sans corrections de l'erreur.

- Je drag&drop Textbox_num.vb vers le panneau toolbox. La barre d'etat m'indique "toolbox item added" mais je ne vois rien de nouveau dans le panneau du genre "textbox_num" à part le chemin du fichier Textbox_num.vb quand le focus est sur un onglet de code.

Je dois vraiment être un boulet mais tu peux m'expliquer comment faire STP?

Commentaire de spinalos le 15/06/2010 20:58:32

on peut aussi utiliser ce petit code pour avoir un textbox numerique ??

' Pour desactiver la saisie lors de la saisie d'autre chose que du numerique
' un petit souci, c'est qu'on peut pas effacer ce qu'on a taper si on utilise ce code là

If (Char.IsNumber(e.KeyChar)) Then
            e.Handled = False
        Else
            e.Handled = True
End If


' un autre code, avec celui la , on peu effacer
If Not IsNumeric(TextBox1.Text) Then
            TextBox1.Text = ""
End If

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

test valeur textbox, numérique ou non ? [ par ranouf ] je sais que c le truc bato mais je retrouve plus comment on fait pour tester si un textbox est numérique ou non.if (txtPoste.text= '''du numérique''') Isnumeric [ par Vivolenantais ] Comment fait-on pour ne rentrer soit que du num&#233;rique dans un textbox, soit que du alphanum&#233;rique. Et lorsqu'un textbox est pr&#233;vue pour test numérique dans une textbox [ par ALFA2K ] Je voudrais tester le contenu d'une textbox. Cette text box est reliée à une base access via un contrôle ADODC ( datasource et datafield ) . La valeur Passage entre Champ numérique et Textbox d'un formulaire [ par pasmar250659 ] Bonjours,Je travail sur une table access ayant principalement des champs de Type DoubleEtant novice en .net - je passe de VB5 sans adoJe me pose une q Vb.Net Condition is not numérique ??? dans un textbox [ par MagDix ] Salut... Je cherche à faire une condition spécial.Je ne sais pas si c'est possible à faire dans une condition. Je veux faire une condition qu controler si le contenu d'un textbox est numérique et si une date est valide [ par Eric25 ] Bonsoir,Après plus d'une heure de recherche sur msdn sans résultats probants, j'abandonne...Je cherche tout simplement à verifier si la valeur saisie SetFocus [ par PFourrey ] Bonsoir &#224; tous. Je d&#233;bute en VBA et j'ai quelques souci.Pour me faire la main, j'ai voulu faire une petite calculatrice. J'ai un TextBox ou Format personnel dans un textbox. [ par sancho12345 ] Bonjour à tous,   Une petite question au niveau des formats en VB : <p class="MsoNo Faire qu'un point entrer dans une textbox(valeur numérique) se transforme en virgule [ par ninos32 ] Bonjour, j'ai trouver pas mal de postes relatifs a ma question mais aucun ne m'a donné la solution mon problème est que chez moi que j'entre un point VS2008 - Comment faire saisir que du numérique dans un textbox [ par progbuilder ] Bonjour, J'ai sur ma WinForm des champs que l'utilisateur doit remplir en numérique. Par exemple des quantité? Comment je peux forcer


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,413 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales