Accueil > > > TEXTBOX NUMÉRIQUE
TEXTBOX NUMÉRIQUE
Information sur la source
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
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|