Soyez le premier à donner votre avis sur cette source.
Snippet vu 18 378 fois - Téléchargée 28 fois
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
15 juin 2010 à 20:58
' 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
18 nov. 2008 à 01:35
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?
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.