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

Windows Forms Discussion :

Mise en gras d'une partie d'un texte dans un RichTextBox


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut Mise en gras d'une partie d'un texte dans un RichTextBox
    Bonsoir

    j'essaye de mettre en gras une partie de texte dans un RichTextBox mais malgré la sélection de mon texte, j'ai l'intégralité du texte du RichTextBox en gras. Pourquoi ?

    Voici le bout de code où je veux mettre en gras la partie de texte "PhraseTitre" présent dans le texte de mon RichTextBox rtb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim FontTitre As New Font(rtb.Font.Name, rtb.Font.Size, FontStyle.Bold)
    Dim Pos1 As Long = InStr(rtb.Text, PhraseTitre)
    If Pos1 <> 0 Then
            CType(rtb, RichTextBox).SelectionStart = Pos1 - 1
            CType(rtb, RichTextBox).SelectionLength = Len(PhraseTitre)
             CType(rtb, RichTextBox).SelectionFont = FontTitre
    End If
    J'ai mis le SelectionStart à Pos1-1 car à Pos1 il ne prend pas la première lettre de PhraseTitre.

    Merci pour votre aide.
    Cordialement

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Bonjour à vous,

    J'ai tester chez moi en utilisant les mêmes méthodes que vous et cela fonctionne.

    Essayer peut être en changeant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CType(rtb, RichTextBox).SelectionStart = Pos1 - 1
            CType(rtb, RichTextBox).SelectionLength = Len(PhraseTitre)
             CType(rtb, RichTextBox).SelectionFont = FontTitre
    par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rtb.SelectionStart = Pos1 - 1
            rtb.SelectionLength = Len(PhraseTitre)
             rtb.SelectionFont = FontTitre
    êtes-vous certain que Pos1 vaut une valeur suppérieure à 0 ?

    Dans mon test, j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rtb.Text.IndexOf(PhraseTitre)
    mais je pense que c'est pareil que ce que vous faites.

    P.S.: Pour votre variable Font vous pouvez utiliser le constructeur spécifique à ce que vous souhaitez faire (ceci ne changera rien à votre code bien entendu mais vous permet d'utiliser un raccourci lorsque vous souhaitez juste passer en gras, italique, etc)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim FontTitre As New Font(rtb.Font.Name, FontStyle.Bold)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    Merci pour votre réponse complète, mais mon soucis c'est que PhraseTitre se retrouve plusieurs fois dans le RichTextBox et en particulier en première position.
    Donc pour la première occurrence, si je mets Pos1=0, tout le texte du RichTextBox se retrouve en gras, mais si je mets Pos1=1, là, le premier PhraseTitre est en gras uniquement à partir de la deuxième lettre et pas l'intégralité : PhraseTitre.
    Comment faire ?
    Merci encore.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Voici une solution lorsque phraseTitre est répété plusieurs fois dans le texte.

    En csharp
    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
    string phraseTitre = "tu";
                Font fontTitre = new Font(richTextBox1.Font, FontStyle.Bold);
                int pos1 = -1;
     
                do
                {
                    pos1 = richTextBox1.Text.IndexOf(phraseTitre, pos1 + 1);
     
                    if (pos1 >= 0)
                    {
                        richTextBox1.SelectionStart = pos1;
                        richTextBox1.SelectionLength = phraseTitre.Length;
                        richTextBox1.SelectionFont = fontTitre;
                    }
                } while (pos1 >= 0);
    et en VB (il y a peut-être des erreurs de syntaxe n'ayant plus fait de VB depuis un moment)
    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
    phraseTitre As string = "tu";
                fontTitre as new Font(richTextBox1.Font, FontStyle.Bold);
                pos1 as Integer = -1;
     
                do
                {
                    pos1 = richTextBox1.Text.IndexOf(phraseTitre, pos1 + 1);
     
                    if (pos1 >= 0)
                    {
                        richTextBox1.SelectionStart = pos1;
                        richTextBox1.SelectionLength = phraseTitre.Length;
                        richTextBox1.SelectionFont = fontTitre;
                    }
                } while (pos1 >= 0);

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    Merci pour votre aide mais hélas même avec votre code le problème demeure.
    Si Pos1=0 tout le texte est en gras, et si Pos1=1 la première lettre du mot n'est pas en gras.
    Mystère ??!
    Merci quand même.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Je viens d'essayer votre code en Visual Basic en mettant phraseTitre = "tu" et avec ce texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tu es là ?
    ca va et tu va venir ?
    coucou tu va
    sans rien changer d'autre à votre code et cela fonctionne il met bien en gras juste le premier tu du texte sans rien mettre d'autre en gras.

    Avez-vous essayé ce code de manière isolée ou celui-ci se trouve parmi d'autre lignes de code ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Points : 22
    Points
    22
    Par défaut
    Voilà j'ai résolu le problème.
    Après avoir effectivement constaté que le code de gta126 fonctionnait, je me suis rendu compte que j'avais oublié d'indiquer que dans mon RichTextBox je rajoutais des phrases au fur et à mesure. Lors de la mise en place du texte initial avec une seule phrase, tout fonctionnait. Mais c'est après le rajout des phrases supplémentaires que le style Bold s'appliquait alors à l'ensemble du RichTextBox. Comme si le SelectionFont restait appliqué mais non plus à la selection mais à l'ensemble du texte.
    Alors à chaque fois, avant de rajouter une phrase supplémentaire, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Rtb.SelectionStart = 0
    Rtb.SelectionLength = Rtb.Text.Length
    Rtb.SelectionFont = FontInitial
    puis à nouveau je recherche tous les PhraseTitre dans Rtb en appliquant FontTitre.

    Merci en tout cas à gta126 pour son aide précieuse.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Heureux d'avoir pu vous aider.

    Bonne journée à vous et bonne programmation

Discussions similaires

  1. [CR X] Mise en forme d'une partie de la formule
    Par Aitone dans le forum Formules
    Réponses: 14
    Dernier message: 26/12/2013, 15h13
  2. Identifier une partie d'un text dans une cellule
    Par markinho04 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/09/2010, 16h21
  3. récupérer une partie d'un texte dans une variable
    Par Bubale dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/05/2008, 11h18
  4. Réponses: 5
    Dernier message: 02/01/2007, 15h19
  5. changer la mise en forme d'une partie d'un textarea
    Par gedeon555 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/08/2006, 11h48

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