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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    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
    Par défaut
    utiliser un richtextbox sera plus adapté à mon avis.

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

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    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
    Par défaut
    il faut que tu fasses la coloration en temps réel oui

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

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    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
    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 confirmé Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    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