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

C# Discussion :

Contrôler le Texte collé dans un textBox.


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Contrôler le Texte collé dans un textBox.
    Bonjour;

    J'ai crée un textBox numérique avec une expression régulière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            Regex myRegex = new Regex(@"[\d\b\cv\cx\cc\ca\cz\cy\r\n]");
     
            //Traitement quand on appui sur une touche
            private void tbxTest_KeyPress(object sender, KeyPressEventArgs e)
            {
                //Si la touche entée au clavier ne correspond pas au regex 
                if (!myRegex.IsMatch(e.KeyChar.ToString()))
                {
                    //Arrete le touche - Le caractère n'est pas validé.
                    e.Handled = true;
                    MessageBox.Show("Ce caractère ne peut pas être utilisé", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
    Donc cette TextBox permet tous les chiffres et caractère de controle(ctrl+v;ctrl+z,...)
    J'ai donc voulu contrôler ce que l'utilisateur colle dans la TextBox avec l’évènement TextChanged:
    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
            private void tbxTest_TextChanged(object sender, EventArgs e)
            {
                //On se désabonne a l'évenement tbxTest_TextChanged pour eviter que le traitement soit recusrsif
                this.tbxTest.TextChanged -= new System.EventHandler(this.tbxTest_TextChanged);
     
                //Copier-Coller
                Match match = Regex.Match(tbxTest.Text, @"[^\d\b\cv\cx\cc\ca\cz\cy\r\n]");
     
                int matchCount = 0;
                while (match.Success)
                {
                    matchCount++;
                    match = match.NextMatch();
                }
                if (matchCount > 0)
                {
                    tbxTest.Text = Regex.Replace(Clipboard.GetText().ToString(), @"[^\d\b\cv\cx\cc\ca\cz\cy\r\n]", String.Empty);
                    MessageBox.Show("Certains caractères coller sont invalides: "+ matchCount, "Attention", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
     
                //On se réabonne a l'évenement tbxTest_TextChanged
                this.tbxTest.TextChanged += new System.EventHandler(this.tbxTest_TextChanged);
            }
    Donc ici, je regarde tout ce qui a dans le presse-papier et j'enlève tout mauvais caractère. Mais j'ai un problème ma textBox et bloquée à 4 caractères. Quand la textbox contient par exemple 12 et que l'utilisateur colle a3b4 j'aimerais que la textBox affiche 1234. Mais le résultat de mon traitement est que la textbox n'affiche que 34.

    Merci pour tout aide.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Je pense que tu as trouvé depuis.

    Le problème doit venir d'ici :
    tbxTest.Text = Regex.Replace(Clipboard.GetText()....

    Tu remplaces avec le = ce que la TextBox contenait déjà. Tu devrais utiliser un +=.

  3. #3
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    Salut,

    cela me parait bien compliquer ce que tu veux faire.
    Ce que je peux te proposé c'est de créer un user control qui herite de textbox dans un Dll. une fois que tu as fait cela tu doit surcharger la méthode onKeyPress.
    voila la manière de procéder :
    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
     
    public class IntBox:TextBox
        {
            public int? Value
            {
                get
                {
                    int val = 0;
                    if(int.TryParse(this.Text,out val)) return val;
                    else return null;
                }
                set
                {
                    if (value.HasValue)
                        this.Text = value.Value.ToString();
                    else
                        this.Text = string.Empty;
                }
            }
     
            protected override void OnKeyPress(KeyPressEventArgs e)
            {
                string tab = "0123456789\b";
     
                if (!tab.Contains(e.KeyChar))
                {
                    e.Handled = true;
                }
                base.OnKeyPress(e);
            }
        }
    Apres il te suffit de référencer ta dll dans ton projet et ton user control va apparaitre dans ta boite outils.
    J'espère que cela pourra t aider.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par sylvian37 Voir le message
    Bonjour,
    Je pense que tu as trouvé depuis.

    Le problème doit venir d'ici :
    tbxTest.Text = Regex.Replace(Clipboard.GetText()....

    Tu remplaces avec le = ce que la TextBox contenait déjà. Tu devrais utiliser un +=.
    Salut sylvain;

    Merci de ta réponse, mais j'avais déjà essayé cela.
    Citation Envoyé par dharkan Voir le message
    Salut,

    cela me parait bien compliquer ce que tu veux faire.
    Ce que je peux te proposé c'est de créer un user control qui herite de textbox dans un Dll. une fois que tu as fait cela tu doit surcharger la méthode onKeyPress.
    voila la manière de procéder :
    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
     
    public class IntBox:TextBox
        {
            public int? Value
            {
                get
                {
                    int val = 0;
                    if(int.TryParse(this.Text,out val)) return val;
                    else return null;
                }
                set
                {
                    if (value.HasValue)
                        this.Text = value.Value.ToString();
                    else
                        this.Text = string.Empty;
                }
            }
     
            protected override void OnKeyPress(KeyPressEventArgs e)
            {
                string tab = "0123456789\b";
     
                if (!tab.Contains(e.KeyChar))
                {
                    e.Handled = true;
                }
                base.OnKeyPress(e);
            }
        }
    Après il te suffit de référencer ta dll dans ton projet et ton user control va apparaitre dans ta boite outils.
    J'espère que cela pourra t aider.
    Salut dharkan,
    Merci de ta solution, mais après réflexion je pense que tu as raison, c'est compliqué et non fonctionnel.
    Donc je pense qu'il faudrait simplement annuler la copie, ce que j'arrive a faire (paritellement) avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                if (match.Success)
                {
                    textbox.Text =textbox.Text.Remove(textbox.Text.Length - Clipboard.GetText().Length);
                    MessageBox.Show("Votre copie un ou des caractère(s) non autorisé", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
    Je dis partiellement car si l'utilisateur copie un texte trop grand, seul une partie du texbox est coller, et donc je passe a une index inférieur à 0.

    Ce qui aurait était parfait aurait été d'utiliser la méthode DataObject.AddPastingHandler , mais ce n'est pas possible car je dois travaillé avec le framework 2.0 et cette méthode et utilisable a partir du 3.0

    Donc pour le moment, si il y a une mauvais caracatère dans la copie je vide toute la textbox

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Quand la textbox contient par exemple 12 et que l'utilisateur colle a3b4 j'aimerais que la textBox affiche 1234.

    edit: J'aimerais simplement annuler la copie.

    Merci pour tout aide.

Discussions similaires

  1. [XL-2007] Texte enrichi dans une textbox
    Par DurDur dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/04/2015, 15h02
  2. Réponses: 4
    Dernier message: 09/05/2014, 13h11
  3. Réponses: 0
    Dernier message: 01/02/2013, 09h54
  4. Réponses: 12
    Dernier message: 22/03/2009, 15h07
  5. [VB.NET] texte défilant dans une TextBox
    Par olivier57b dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/08/2006, 16h50

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