/ / La sortie couleur dans la richtextbox ne fonctionne pas - c #, regex, richtextbox

La sortie couleur dans la richtextbox ne fonctionne pas - c #, regex, richtextbox

J'ai une fonction qui devrait produire du texte en couleurRichTextBox. Toutes les correspondances doivent être en rouge et le texte ne correspondant pas en noir. La fonction suivante essaie de changer la couleur du contenu RichTextBox au fur et à mesure que mes entrées sont insérées (comme indiqué dans Colore différentes parties d'une chaîne RichTextBox )

public void OutputColoredMatches(String InputText, MatchCollection Matches, RichTextBox OutputBox)
{
int LastMatchEndIndex = OutputBox.TextLength;
foreach (Match CurrentMatch in Matches)
{
OutputBox.SelectionColor = Color.Black;
OutputBox.AppendText(InputText.Substring(LastMatchEndIndex, CurrentMatch.Index - LastMatchEndIndex));
OutputBox.SelectionColor = Color.Red;
OutputBox.AppendText(InputText.Substring(CurrentMatch.Index, CurrentMatch.Length));
LastMatchEndIndex = CurrentMatch.Index + CurrentMatch.Length;
}
OutputBox.SelectionColor = Color.Black;
OutputBox.Text += InputText.Substring(LastMatchEndIndex, InputText.Length - LastMatchEndIndex);
}

La fonction ajoute le texte qui devrait être noiraprès seulement après avoir défini la couleur de sélection sur le noir et ajoute le texte correspondant trouvé uniquement après avoir défini la couleur de sélection sur le rouge. Malgré le fait de parcourir le code et de le regarder correctement insérer le texte toute la sortie est en noir.

J'ai aussi essayé de changer pour insérer tout (ou des portions)de) le texte, puis modifiez la taille de la sélection RichTextBox. Ensuite, définissez la couleur de sélection, cela n’a pas fonctionné non plus. Tout le texte était rouge ou noir à la fin, malgré les vérifications que j’avais effectuées pour vérifier que la sélection commençait et finissait aux emplacements appropriés. (J'ai essayé quelque chose de similaire à : Coloration sélective du texte dans RichTextBox ). Voici une autre variante de la fonction dans laquelle j'insère des parties du texte, puis en modifie la couleur. J'ai également exploré cela dans le débogueur et vérifié que les éléments étaient sélectionnés de la manière souhaitée, puis que leur couleur était définie. Toute la sortie était en noir:

public void OutputColoredMatches(String InputText, MatchCollection Matches, RichTextBox OutputBox)
{
int SelPos = 0;
int LastMatchEndIndex = OutputBox.TextLength;
foreach (Match CurrentMatch in Matches)
{
SelPos = OutputBox.TextLength;
OutputBox.AppendText(InputText.Substring(LastMatchEndIndex, CurrentMatch.Index - LastMatchEndIndex));
OutputBox.SelectionStart = SelPos;
OutputBox.SelectionLength = OutputBox.TextLength - SelPos;
OutputBox.SelectionColor = Color.Black;

SelPos = OutputBox.TextLength;
OutputBox.AppendText(InputText.Substring(CurrentMatch.Index, CurrentMatch.Length));
OutputBox.SelectionStart = SelPos;
OutputBox.SelectionLength = OutputBox.TextLength - SelPos;
OutputBox.SelectionColor = Color.Red;

LastMatchEndIndex = CurrentMatch.Index + CurrentMatch.Length;
}
OutputBox.SelectionColor = Color.Black;
OutputBox.Text += InputText.Substring(LastMatchEndIndex, InputText.Length - LastMatchEndIndex);
}

Pour être plus précis, si j'avais un habituéexpression "s", et un texte d'entrée "asdf", cette fonction insère "a" dans la boîte de sortie. Ensuite, il définit la position de sélection sur 0 et la longueur de la sélection sur 1, puis la couleur sur le noir. Il insère ensuite "s", la position de sélection sur 1, la longueur sur 1 et la couleur sur le rouge. Ensuite, il insère "df" définit la position de sélection sur 2, la longueur sur 2 et la couleur sur le noir. Ensuite, toute la sortie est en noir.

J'ai aussi essayé une variété de choses avec lesélection de l'emplacement de départ et de la longueur, puis insertion de texte sans effet. Je pense qu'il est probable que je commette une erreur qui ne soit que vaguement liée à la zone de texte.

Quels autres facteurs peuvent influer sur un comportement de coloration auquel je ne ferai peut-être pas attention?

Réponses:

0 pour la réponse № 1

Vous n'êtes pas en train de faire une sélection de couleur, dans le lien que vous avez donné, ils définissent une sélection avant de définir la couleur.

box.SelectionStart = jx;
box.SelectionLength = phrase.Length;
box.SelectionColor = color;

Vous devrez trouver et sélectionner les correspondances, puis les colorier.

EDIT: Je n'ai pas testé cela, mais il semble à peu près correct ..

//set the start of the selection to the current end of the text box
OutputBox.SelectionStart = OutputBox.Text.Length - 1;
//set the selections length
OutputBox.SelectionLength = CurrentMatch.Length;
//and finally set the color
OutputBox.SelectionColor = Color.Red;