2013-06-24 14 views
9

So che ci sono un sacco di domande su come "bolden text" qui, ma nessuna delle risposte è di aiuto, penso che potrebbe essere che la Rich Text Box venga creata in fase di runtime.Rich Text Box - Grassetto

Sto facendo un client di chat, quindi ho un ricco casella di testo contempla nelle linee ei messaggi sono i seguenti: {} Nome: {Message} \ r \ n

voglio Bolden il nome, ho provato molti esempi di codice, ma questa è la più vicina che ho avuto modo di farlo funzionare:

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); 

il primo messaggio, funziona perfettamente bene, il nome è in grassetto. Ma quando aggiungo un secondo messaggio, tutto diventa audace anche se la seconda volta seleziono l'indice di inizio (che è questo esempio è 37) ma tutto diventa solo in grassetto, anche tutti i messaggi precedenti!

Qualche idea su cosa potrebbe causare questo? Grazie in anticipo!

risposta

7

Questa linea è un problema:

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

si sta sostituendo la formattazione e il testo con questa nuova versione di una stringa, ed è probabilmente raccogliendo il carattere in grassetto dall'ultimo aggiornamento.

Provate ad usare AppendText invece:

textBox.AppendText(roomChatMessage.from + ": " + roomChatMessage.text + "\r\n"); 
+0

Signore, sei un genio! Questo mi ha lasciato perplesso per le ultime 3 ore! Grazie! –

5

Ecco alcuni codice che ho usato una sola volta:

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(@"}"); 

rtxtRequest.Rtf = sb.ToString(); 

se si appende @ "\ rtf1 \ ansi" è possibile utilizzare \ b e \ b0 di dichiarare grassetto all'interno della stringa. E \ line crea una nuova linea. Puoi anche fare la sottolineatura, ecc. Ho trovato più semplice costruire la String in questo modo piuttosto che applicare le proprietà.

+0

L'altra cosa da annotare è che si assegna a questo .rtf, non .text. Grazie per l'aiuto! – Chad

9
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"); 

Spero che questo aiuti :)

2

In Visual Studio è possibile utilizzare questo codice breve:

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

Sarà:

Questo è in grassetto

Problemi correlati