web-dev-qa-db-fra.com

Zone de texte riche - Gras

Je sais qu'il y a beaucoup de questions "comment mettre en gras le texte" ici, mais aucune des réponses n'aide, je pense qu'il se peut que la zone de texte enrichi soit créée au moment de l'exécution.

Je crée un client de chat, j'ai donc une zone de texte riche divisée en lignes et les messages sont les suivants: {Name}: {Message}\r\n

Je veux mettre le nom en gras, j'ai essayé de nombreux exemples de code, mais c'est le plus proche que je puisse faire fonctionner:

int length = textBox.Text.Length;
textBox.Text += roomChatMessage.from + ": " + roomChatMessage.text + "\r\n";
textBox.Select(length, roomChatMessage.from.Length);
textBox.SelectionFont = new Font(textBox.Font, FontStyle.Bold);

Le premier message, ça marche très bien, le nom est en gras. Mais quand j'ajoute un deuxième message, tout devient gras même si la deuxième fois je sélectionne l'index de départ (qui est cet exemple est 37) mais tout devient juste gras, tous les messages passés aussi!

Une idée de ce qui peut provoquer cela? Merci d'avance!

14
Tom O

Cette ligne est un problème:

textBox.Text += roomChatMessage.from + ": " + roomChatMessage.text + "\r\n";

Vous remplacez la mise en forme et le texte par cette nouvelle version d'une chaîne et récupérez probablement la police en gras de la dernière mise à jour.

Essayez d'utiliser AppendText à la place:

textBox.AppendText(roomChatMessage.from + ": " + roomChatMessage.text + "\r\n");
10
LarsTech
 ObjRichTextBox.SelectionFont = new Font(ObjRichTextBox.Font, FontStyle.Bold);

 ObjRichTextBox.AppendText("BOLD TEXT APPEARS HERE");

 ObjRichTextBox.SelectionFont = new Font(ObjRichTextBox.Font, FontStyle.Regular);

 ObjRichTextBox.AppendText("REGULAR TEXT APPEARS HERE");

J'espère que cela t'aides :)

17
Sujay

Voici un code que j'ai utilisé une fois:

var sb = new StringBuilder();
        sb.Append(@"{\rtf1\ansi");
        sb.Append(@"\b Name: \b0 ");
        sb.Append((txtFirstName.Text);
        sb.Append(@" \line ");
        sb.Append(@"\b DOB: \b0 ");
        sb.Append(txtDOBMonth.Text);
        sb.Append(@" \line ");
        sb.Append(@"\b ID Number: \b0 ");
        sb.Append(txtIdNumber.Text);
        sb.Append(@" \line \line ");
        sb.Append(@"}");

richTextBox.Rtf = sb.ToString();

si vous ajoutez @ "\ rtf1\ansi", vous pouvez utiliser\b et\b0 pour déclarer gras dans la chaîne. Et\line crée une nouvelle ligne. Vous pouvez également souligner, etc. J'ai trouvé plus facile de créer une chaîne comme celle-ci que d'appliquer des propriétés.

10
Jonesopolis

Dans Visual Studio, vous pouvez utiliser ce code court:

richTextBox1.Rtf = @"{\rtf1\ansi This is in \b bold\b0.}";

Ce sera:

C'est en gras

3
Bogdan

Je pense qu'il peut être plus facile d'utiliser la propriété RichTextBox.Rtf lors de l'exécution de ce type d'action, comme mentionné ici:

MSDN: Code: mise en forme des caractères en gras dans un contrôle RichTextBox (Visual C #)

Étant donné que le contenu de votre zone de texte augmente, la gestion des entités de sélection peut devenir fastidieuse.

2
Arclight