Bonjour tout le monde,
En espérant que je sois dans la bonne partie du forum...
J'ai un texte dans une richtextbox (nommée rtb) et je voudrais mettre en surbrillance un mot que je recherche...
Dans un texte bête et méchant j'utilise ce qui suit (et qui marche parfaitement):
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 //évènement click { string wordToSearch = "mot"; //Déclaré plus haut tr = new TextRange(this.rtb.Document.ContentStart, this.rtb.Document.ContentEnd); //recherche de la position de départ du mot à mettre en surbrillance int startPosition = tr.Text.IndexOf(wordToSearch); //nombre de ligne pour aller au mot à mettre en surbrillance int lines = this.GetLinesCount(tr.Text, startPosition); //position du mot à mettre en surbrillance au niveau de la richTextBox TextPointer startRtb = this.rtb.Document.ContentStart; TextPointer start = startRtb.GetPositionAtOffset(startPosition + lines); TextPointer end = start.GetPositionAtOffset(wordToSearch.Length); //maintenant que l'on sait où est le mot, on le selectionne, //pour le mettre en surbrillance this.rtb.Selection.Select(start, end); this.rtb.Selection.ApplyPropertyValue(TextElement.BackgroundProperty, this.rtb.SelectionBrush); } //fonction qui va compter, le nombre de ligne public int GetLinesCount(string str, int startPosition) { // compte des "\n" et "\r" int lines = str.Take(startPosition).Count(k => k.Equals((char)13) || k.Equals((char)10)); //lines + 2 parce que sinon, il manquera la ligne avec le mot recherché return lines + 2; }
Mais dès que je change de police (mettre en "Lucida calligraphy" par exemple) ou change la forme du texte (Italic) ou encore la couleur, j'ai un problème de décalage...
Le mot qui se met en surbrillance est alors systématiquement avant le mot que j'ai choisi (selon le nombre de ligne, le décalage varie entre un ou deux caractères et plusieurs lignes).
Quand je debug, je voit bien que les positions de départ (startposition + lines) et de fin sont corrects, mais la surbrillance se fait mal!!!
Ensuite, je ne sais pas comment chercher une erreur quand il n'y en a pas!!!
Sinon j'ai crut comprendre que le paramètre "offset" est est un comptage d'octets et non de caractères... Mais là encore le décalage est présent quand le formatage du texte change.
Désolé pour la taille du message, mais je ne voyais pas bien comment faire plus cour et tout aussi détaillé!!!
En tout cas merci d'avance, et à bientôt...
Partager