IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Récupérer le texte du presse papier avec My.Computer.Clipboard.GetText: Doublons


Sujet :

VB.NET

  1. #1
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut Récupérer le texte du presse papier avec My.Computer.Clipboard.GetText: Doublons
    Salut à tous,

    J'ai plusieurs TextBox pour lesquels certains type de contenu est interdit (des chiffres, des prix ou du textes).

    J'ai, pour cela, créé un ContextMenuStrip pour le menu contextuel lors d'un click droit (copier, coller, supprimer).

    J'ai écrit le code suivant pour l'évènement Opened du ContextMenuStrip:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    Private Sub cmsCopierCollerSuppr_Opened(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmsCopierCollerSuppr.Opened
     
            'Si le presse papier contient du texte alors
            If My.Computer.Clipboard.ContainsText = True Then
     
                If txtMagPre.Focused = True Or txtNbreVO.Focused = True Or txtNbreVF.Focused = True Or txtVolaAcheter.Focused =                    True Or txtLien.Focused = True Then
     
                    'Nbre de caractère max: 75
                    If My.Computer.Clipboard.GetText.Length <= 75 Then
     
                        tsmiColler.Enabled = True
     
                    Else
     
                        tsmiColler.Enabled = False
     
                    End If
     
                ElseIf txtAnnee.Focused = True Then
     
                    'Pour autotiser le coller, il faut que le presse papier contienne que des chiffres et moins de 5 caractères
                    If rgChiffre.IsMatch(My.Computer.Clipboard.GetText) = False And My.Computer.Clipboard.GetText.Length > 5 Then
     
                        tsmiColler.Enabled = False
     
                    Else
     
                        tsmiColler.Enabled = True
     
                    End If
     
                ElseIf txtVolAchete.Focused = True Then
     
                    'Pour autotiser le coller, il faut que le presse papier contienne que des chiffres et moins de 4 caractères
                    If rgChiffre.IsMatch(My.Computer.Clipboard.GetText) = False And My.Computer.Clipboard.GetText.Length > 4 Then
     
                        tsmiColler.Enabled = False
     
                    Else
     
                        tsmiColler.Enabled = True
     
                    End If
     
                ElseIf txtPrixEdit.Focused = True Then
     
                    'Pour autotiser le coller, il faut que le presse papier contienne un prix et moins de 6 caractères
                    If rgPrix.IsMatch(My.Computer.Clipboard.GetText) = False And My.Computer.Clipboard.GetText.Length > 6 Then
     
                        tsmiColler.Enabled = False
     
                    Else
     
                        tsmiColler.Enabled = True
     
                    End If
     
                        tsmiColler.Enabled = False
     
                End If
            End If
        End Sub
    Ensuite pour chaque bouton du ContextlenuStrip, je gère l'évènement Click

    Pour copier, j'utilise ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    My.Computer.Clipboard.SetText(txtMagPre.Text)
    Pour coller, j'utilise ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    txtMagPre.Text= My.Computer.Clipboard.GetText()
    Maintenant, il faut gérer aussi les raccourcis Ctrl + c et Ctrl + v.
    Dans l'évènement Keypress d'un TextBox :

    Code pour Ctrl + v
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    'Si ctrl+v
            If Asc(e.KeyChar) = 22 Then
     
                'Si le presse papier contient du texte et au maximum 75 caratères alors
                If My.Computer.Clipboard.ContainsText = True And My.Computer.Clipboard.GetText.Length <= 75 Then
     
                    txtMagPre.Text = My.Computer.Clipboard.GetText
     
                Else
     
                    e.Handled = True
     
                End If
            End If
    Tout fonctionne correctement (notamment la vérification de ce que contient le presse papier) mais (ah enfin) lorsque je fais Ctrl + v le contenu du presse papier apparaît deux fois. Si le presse papier contient "RRR", j'ai dans le TextBox: "RRRRRR".
    Si j'utilise le menu contextuel, je n'ai pas ce souci.
    J'ai vérifié en pas-à-pas cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txtMagPre.Text = My.Computer.Clipboard.GetText
    Et txtMagPre.Text est bien égale au contenu du presse papier mais une fois le pas-à-pas terminé (end sub de l'évènement), le contenu du TextBox est égal à deux fois celui du presse papier.
    J'ai l'impression qu'il y a deux fois Ctrl + v.

    Merci pour vos aides et merci à tous de m'avoir lu.

  2. #2
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Salut,

    Petite question toute bête, as-tu essayé de mettre ceci juste avant ta ligne pour copier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    txtMagPre.Text = ""
    txtMagPre.Text= My.Computer.Clipboard.GetText()
    Sinon il avait eu un post il y a quelques semaines d'un membre qui avait aussi des problèmes de doublons (dans son cas c'était plus que 2) comme si l'évènement se reproduisait plusieurs fois sans explication, peut-être aller chercher de ce coté-ci, vu que ton code n'a pas d'incohérence à première vue.

  3. #3
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Merci pour ta réponse mais j'avais déjà essayé ce que tu proposes.
    Sinon je n'ai pas trouvé le post dont tu parles (j'utilises surement les mauvais mots clés)

  4. #4
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Salut.
    A ta place je créerai un nouveau contrôle.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public class ValidatedTextBox
        : System.Windows.Forms.TextBox
    {
        private string _OldValue = string.Empty;
        private string _RegexValidationPattern;
     
        /// <summary>
        /// Obtient ou définit un motif Regex pour valider les données saisies.
        /// </summary>
        public string RegexValidationPattern
        {
            get { return _RegexValidationPattern; }
            set { _RegexValidationPattern = value; }
        }
     
        /// <summary>
        /// On surcharge la méthode appelée quand le texte change.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnTextChanged(EventArgs e)
        {
            // Validation du texte qui viens d'être saisi (ou collé)
            if (System.Text.RegularExpressions.Regex.IsMatch(Text, _OldValue))
            {
                _OldValue = Text; // Le texte est validé et donc accepté.
                base.OnTextChanged(e); // Puisqu'on a accepté le texte, on applique exécute le code normal du TextBox.
            }
            else
                Text = _OldValue; // Le texte n'est pas validé et donc on restaure l'ancient texte.
        }
    }

    J'ai écris le code en C# par pure réflexe et j'ai la flemme de le ré-écrire en VB, je te laisse ce boulot :p
    Le principe est simple :
    Au lieu d'utiliser des TextBox classiques tu utilises cette classe. Ils sont en tout point identiques aux TextBox classiques à une exception près :

    Lorsque le texte contenu change, ce texte est validé par une expression rationnelle. Si le texte ne correspond pas à l'expression, alors l'ancien texte est restauré.
    En conséquence, que ce soit en frappe clavier, en copier/coller par raccourcit clavier ou par menu contextuel, ou encore par drag and drop, tous les cas sont gérés.

    A toi d'adapter à tes besoins, mais ca me semble plus judicieux que de gérer des évènements dans tous les sens pour gérer tous les cas et créer des menus contextuels pour écraser les menus standards, etc...

  5. #5
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Merci ctxnop pour ton aide

    J'ai essayé pour un TextBox n'acceptant que des chiffres et 3 caratères maximum et ça fonctionne très bien.
    Je vais essayer avec les autres TextBox.
    Je reviendrai pour le résultat final.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 672
    Points : 1 172
    Points
    1 172
    Par défaut
    Bonsoir,
    Déjà dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (System.Text.RegularExpressions.Regex.IsMatch(Text, _OldValue))
    ne doit on pas y voir le pattern en second argument?
    Et ensuite, dans l'esprit judicieux de ctxnop,
    pourquoi ne pas, classiquement, utiliser l'expression rationnelle au niveau du Validating ou du Validated de chaque TextBox?

  7. #7
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    C'est plutôt évident que c'est une faute d'inattention pour avoir taper rapidement le code non ? Sinon je dois vraiment être stupide pour en plus avoir déclaré une propriété au nom si évocateur ("RegexValidationPattern") sans l'utiliser...
    Évidemment qu'il faut le pattern en second argument.

    Ensuite, mon esprit judicieux n'apprécient pas trop le ton que tu emplois alors qu'il ne t'as rien fait. J'ai fais une suggestion, j'ai dis que ca me semble plus judicieux, pas que ca l'est et que donc tout autre méthode est forcément nulle.

    Enfin, oui et non, validating peut être utilisé mais il pose un problème : il ne valide qu'une fois la saisie terminée. Donc il accepte que l'on tape n'importe quoi et une fois que le contrôle perd le focus ou qu'il est validé plus "directement" alors l'ancien texte est restaurer.
    Ça parait anodin comme ca mais ca a un impacte majeur.

    Imagine une boite de dialogue qui demande une date avec les classiques boutons annuler/ok/...
    Tu tape "marcel n'a aucune idée de sa date d'anniversaire" dans le champs date.
    Rien ne t'empêche de le faire jusqu'ici. Tu clique directement sur Ok, la validation à donc lieu, le texte n'est pas une date et est donc refusé, l'ancien texte est restauré, conclusion tu as fais OK sur une date alors que tu avais tapé du texte.
    Tu me dirais qu'on peux alors empêcher le Ok en cas de contrôle non validé, bla bla bla.
    Oui, tu n'as pas tords, mais du coup on doit gérer tout plein d'évènements dans tous les sens, au niveau de la classe de la fenêtre :
    - le bouton OK qui doit forcer la validation de chaque contrôle pour le cas où un d'eux n'aurait pas encore été validé. Puis il doit vérifier qu'il n'y a eu aucun échec de validation, et décider s'il faut ou non fermer la fenêtre, en indiquant à l'utilisateur qu'il a tapé n'importe quoi.
    - Un handler d'évènement sur chaque contrôle à valider avec à chaque fois un code identique exception faite du motif (en supposant qu'on se serve à chaque fois d'une validation à coup d'expression rationnelle).

    Je ne sais pas toi, mais moi j'ai appris qu'en POO quand on a une classe qui fonctionne bien mais qu'il nous manque une fonctionnalité, on écris pas 12 fois le même code pour ajouter cette fonction sur chaque instance de la classe, on créer une nouvelle classe qui hérite de l'autre et qui permet ainsi de n'avoir qu'une seule fois le code et d'être utilisable partout du jour au lendemain sans se poser de question.

    Ce n'est pas parce que le Designer de Visual Studio fait d'une façon que c'est systématiquement la bonne.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 672
    Points : 1 172
    Points
    1 172
    Par défaut
    Bonjour
    Citation Envoyé par ctxnop Voir le message
    Ensuite, mon esprit judicieux n'apprécient pas trop le ton que tu emplois alors qu'il ne t'as rien fait.
    tu voudras bien m'excuser de mon manque de précision qui en effet prête à confusion.
    Tu ne peux pas le savoir, mais je suis plutôt respectueux des gens, et de surcroit, conscient de mon niveau dans le domaine qui nous occupe, loin de moi l'idée de faire le mariole.
    C'est la baffe assurée et bien méritée au prochain tournant.
    Je voulais dire que ton idée de contrôler non pas en amont, mais en aval, les entrées utilisateur, me semblait la bonne.
    D'où ma seconde question sur le Validating.
    Merci d'y avoir répondu, malgré tout, avec beaucoup de précision.
    Et de me permettre de comprendre que contrôler trop tôt ou trop tard (comme je le fais) demande beaucoup d'efforts.
    Alors qu'une classe à bon escient et au bon moment évite beaucoup de lignes de code.

  9. #9
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Pas de problème, ce sont des choses qui arrivent, de surcroit quand la communication est écrite, il n'est pas si rare qu'une tournure de phrase donne involontairement un ton ou un sens qui n'est pas celui voulu par l'auteur.

  10. #10
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Voici le code ré-écrit en VB:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Public Class ValidatedTextBox
        Inherits System.Windows.Forms.TextBox
     
        'Regex par défaut : "^.+&" car null non accepté
        Private Pattern As String = "^.+$"
     
        'Obtient ou définit un motif Regex pour valider les données saisies.
     
        Property RegexValidationPattern As String
     
            Get
     
                Return Pattern
     
            End Get
     
            Set(ByVal value As String)
     
                Pattern = value
     
            End Set
     
        End Property
     
        'On surcharge la méthode appelée quand le texte change.
     
        Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
     
            'Validation du texte qui viens d'être saisi (ou collé)
            If (System.Text.RegularExpressions.Regex.IsMatch(Text, Pattern)) Then
     
                'Puisqu'on a accepté le texte, on applique exécute le code normal du TextBox.
                MyBase.OnTextChanged(e)
     
            Else
     
                'Le texte n'est pas validé et donc vide le textbox
                Text = Nothing
     
            End If
     
        End Sub
     
    End Class
    Il suffit de préciser à la propriété RegexValidationPattern la valeur du pattern (ici le cas où on accepte tous les caractères)

    Encore merci ctxnop car ça fonctionne très bien. Plus besoin de gérer de multiple évènements.

    Mais une question ma taraude: Pourquoi il y a-t-il un doublons du presse papier lorsque j'utilise ce que j'ai écrit au début de mon 1er poste?

  11. #11
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Voilà le topic dont je te parlais, où la personne avait une redondance au niveau d'un clic de bouton.

    http://www.developpez.net/forums/d96...bouton-souris/

  12. #12
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Je pense que ce qui ne va pas c'est ton if/else.
    Tu fais "si le presse papier contient ce qu'il faut je colle son contenu, sinon j'indique j'ai j'ai géré moi même la touche".

    Autrement dit, la touche est considérée comme gérée uniquement quand le presse-papier ne contient rien de valable, du coup le coller standard s'effectue aussi.
    Normalement on met handled = true dès l'instant où on a géré la touche et c'est le cas quand tu fais ton affectation.

    Tente comme ca :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If Asc(e.KeyChar) = 22 Then
        e.Handled = True
        'Si le presse papier contient du texte et au maximum 75 caratères alors
        If My.Computer.Clipboard.ContainsText = True And My.Computer.Clipboard.GetText.Length <= 75 Then
            txtMagPre.Text = My.Computer.Clipboard.GetText
        End If
    End If

    Je précise aussi que KeyPress n'est pas déclenché par la touche contrôle.

    Concernant l'autre méthode, quelques petites optimisations peuvent être faites :
    - tout d'abord tu peux modifier l'application de la regex pour que quand elle est nulle ou vide il n'y a pas validation et donc on retombe dans un textbox normal, ca consumera moins de ressource.
    - une expression rationnelle dont le motif est vide match tout le temps.
    - L'expression que tu as donné pose un gros problème : tu ne peux plus vider le textbox une fois que quelque chose y à été saisi.
    -Personnellement je ne suis pas pour la solution de vider le textbox quand la validation échoue. La raison est simple, admettons un textbox qui attend une adresse e-mail. Tu va donc interdire les accents. Si jamais l'utilisateur tape un accent (par accident ou réflexe) ca vide ton textbox et il a tout a re-saisir. Alors que ma méthode remet l'ancien texte, ce qui en cours de saisie signifie qu'il efface l'accent qui vient d'être tapé à l'instant.

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 672
    Points : 1 172
    Points
    1 172
    Par défaut
    Je me demande si Ctrl-V n'est pas géré en natif.
    Si c'est le cas, le keypress le rappellerait une seconde fois.
    Il faudrait essayer en mettant en commentaire la routine keypress pour voir.

  14. #14
    Membre éprouvé Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Points : 947
    Points
    947
    Par défaut
    Merci encore ctxnop (je suis rendu à combien de merci ? ) pour les précisions apportées.

    Voici le code de la classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    Public Class ValidatedTextBox
        Inherits System.Windows.Forms.TextBox
     
        Private strOldText As String
        Private Pattern As String
     
        'Obtient ou définit un motif Regex pour valider les données saisies.
     
        Property RegexValidationPattern As String
     
            Get
     
                Return Pattern
     
            End Get
     
            Set(ByVal value As String)
     
                Pattern = value
     
            End Set
     
        End Property
     
        'On surcharge la méthode appelée quand le texte change.
     
        Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
     
            'Si regex vide => fonctionnement normal du TextBox
            If Pattern = Nothing Then
     
                MyBase.OnTextChanged(e)
     
            Else
     
                'Validation du texte qui viens d'être saisi (ou collé)
                If (System.Text.RegularExpressions.Regex.IsMatch(Text, Pattern)) Then
     
                    strOldText = Text
                    'Puisqu'on a accepté le texte, on applique exécute le code normal du TextBox.
                    MyBase.OnTextChanged(e)
     
                Else
     
                    'Si on efface le texte entièrement
                    If Text = Nothing Then
     
                        strOldText = Text
     
                    Else
     
                        'Le texte n'est pas validé et donc vide le textbox
                        Text = strOldText
     
                    End If
     
                End If
            End If
        End Sub
     
    End Class
    J'ai ajouté cette ligne car on ne peux pas effacer entièrement la zone de texte si on souhaite tout supprimer (si la valeur de Text est vide, le test du regex étant faux le contenu de strOldText est copié dans Text => donc jamais vide)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'Si on efface le texte entièrement
    If Text = Nothing Then
    strOldText = Text
    ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/09/2007, 09h46
  2. Réponses: 12
    Dernier message: 10/06/2006, 19h07
  3. récupérer une image du presse papier
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/08/2005, 10h18
  4. Placer du texte dans le presse papier avec DOM
    Par Desraux dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/01/2005, 13h11
  5. Récupérer un évènement du presse papier
    Par cedrolin dans le forum MFC
    Réponses: 2
    Dernier message: 26/07/2004, 23h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo