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++/CLI Discussion :

Détecter un mot de la textbox et le changer de couleur s'il est dans une liste


Sujet :

C++/CLI

  1. #1
    Membre du Club Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Points : 68
    Points
    68
    Par défaut Détecter un mot de la textbox et le changer de couleur s'il est dans une liste
    Rebonjour,
    Voilà, j'ai une grande textbox multiligne. Je fais une liste (en pseudo-code, car je ne sais pas si c'est possible en C++/CLI) où se trouve entre autre les mots AddHeroCreatures et CanMoveHero. Dans une autre liste, je fais de même, mais avec deux autre mots (toujours entre autres) : CREATURE_IMP et CREATURE_AIRELEMENTAL.

    Enfin, je voudrai un évènement qui vérifie à chaque frappe un mot. Par exemple, si j'écris dans ma textbox CREATURE_AIREL, il ne se passe rien, le mot reste en blanc. Et ce à chaque frappe jusqu'à ce que le mot contienne la chaîne CREATURE_AIRELEMENTAL. Ceci déclenche des actions, telles que le changement de couleur de ce mot.
    Si on écrit AddHeroCr, rien ne se passe. Si on continue le mot et qu'on écrit AddHeroCreatures, ce mot est changé de couleur (une autre que celle de CREATURE_AIRELEMENTAL).
    Etc, etc.

    Vous voyez ce que je veux faire maintenant ^^
    Les problèmes, c'est que je ne sais pas si il existe un évènement pour cela, je ne sais pas comment créer une liste (invisible à l'utilisateur) dans laquelle on pourrait vérifier à chaque frappe que le mot tapé en fait partie, et je ne sais pas non plus comment on change de couleur un mot précis dans une textbox multiligne...

    Merci d'avance,
    Hemophilius.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    utiliser un richtextbox sera plus adapté à mon avis.

  3. #3
    Membre du Club Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Points : 68
    Points
    68
    Par défaut
    Merci, mais je viens de regarder les méthodes que la classe RichTextBox, et il n'y a pas celles qui m'intéressent, enfin, pas plus qu'une TextBox normale... Il n'y a pas d'évènements qui me conviendrait non-plus Le texte doit être coloré automatiquement et en temps réel, sans qu'il y ait de gros lag à chaque frappe pour vérifier si le mot est dans la liste...

    Me tromperais-je ?

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il faut que tu fasses la coloration en temps réel oui

  5. #5
    Membre du Club Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Points : 68
    Points
    68
    Par défaut
    Justement, alors... Comment ?
    Désolé d'être si ignare...

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    alors, première chose à faire, générer l'événement TextChanged sur le richTextBox

    ensuite, imaginons que je veuille changer la couleur du mot "nico" en rouge, je vais faire :

    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
    System::Void richTextBox1_TextChanged(System::Object^  sender, System::EventArgs^  e)
    {
    	int i = richTextBox1->SelectionStart;
    	Color color = richTextBox1->SelectionColor;
    	String ^searchString = "nico";
    	int pos = richTextBox1->Find(searchString);
    	if (pos > 0)
    	{
    		richTextBox1->SelectionStart = pos;
    		richTextBox1->SelectionLength = searchString->Length;
    		richTextBox1->SelectionColor = Color::Red;
    		richTextBox1->SelectionStart = i;
    		richTextBox1->SelectionColor = color;
    	}
    }

  7. #7
    Membre du Club Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Points : 68
    Points
    68
    Par défaut
    Merci beaucoup
    Le code doit cependant être encore amélioré : si je place le curseur en plein milieu du mot coloré, et que je commence à écrire, le mot devrait se recolorer en la couleur par défaut, car ce mot "nico" n'existe plus...
    Et aussi, y aurait-il un moyen de chercher dans une liste à chaque évènement, au lieu de faire des centaines de conditions pour chacun des mots clés que je veux colorer, en plusieurs couleurs différentes ?
    Exemple : Si le mot est dans List1, on le colore en rouge. Si il est dans List2, en bleu, etc.

  8. #8
    Membre du Club Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Points : 68
    Points
    68
    Par défaut
    C'est OK, voilà le code final :
    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
            void ColorIDs()
            {
                 auto int i;
                 auto int charCount = 1;
                 auto int staticSelection = this->TriggersRedactionSpace->SelectionStart;
                 auto int currentSelection = ((this->TriggersRedactionSpace->SelectionStart) - 1);
                 if (currentSelection < 0) currentSelection = 0;
                 for (i=0; (i<50) && (this->TriggersRedactionSpace->SelectedText != " ") && (this->TriggersRedactionSpace->SelectedText != "\n") && (currentSelection != 0); i++)
                 {
                     this->TriggersRedactionSpace->Select((currentSelection - 1), 1);
                     if (this->TriggersRedactionSpace->SelectedText != " ")
                         charCount++;
                     currentSelection--;
                 }
     
                 if ((staticSelection - charCount) < 0)
                     this->TriggersRedactionSpace->Select(0, (charCount - 1));
                 else
                     this->TriggersRedactionSpace->Select((staticSelection - charCount), (charCount - 1));
     
                 System::String ^searchString = this->TriggersRedactionSpace->SelectedText;
                 auto int loopIndex;
                 auto int loopEnd = this->AfficherIDsINVISIBLE->Items->Count;
                 for (loopIndex=0; loopIndex<loopEnd; loopIndex++)
                 {
                     this->AfficherIDsINVISIBLE->SetSelected(loopIndex, true);
                     if (searchString == (this->AfficherIDsINVISIBLE->SelectedItem->ToString()))
                         this->TriggersRedactionSpace->SelectionColor = Color::Coral;
                 }
                 this->TriggersRedactionSpace->SelectionStart = staticSelection;
                 this->TriggersRedactionSpace->SelectionLength = 0;
            }
     
    ...
     
    private: System::Void TriggersRedactionSpace_KeyUp(System::Object  ^sender, System::Windows::Forms::KeyEventArgs^  e) {
                 if (e->KeyValue == 32)
                     ColorIDs();
             }

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

Discussions similaires

  1. [C# 2.0] Détecter les doublons dans une List<string>
    Par Rodie dans le forum Windows Forms
    Réponses: 36
    Dernier message: 30/03/2013, 15h21
  2. Réponses: 2
    Dernier message: 25/11/2011, 22h29
  3. Réponses: 4
    Dernier message: 04/04/2011, 11h46
  4. Réponses: 1
    Dernier message: 26/10/2006, 12h02

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