2017-04-21 6 views
1

J'utilise cette fonction pour mettre à jour un RichTextBox dans des situations de fil croiséesformat rtf fil croix

public void AddRtf(string text) 
{ 
    // cross thread allowed 
    if (rtb.InvokeRequired) 
    { 

     rtb.Invoke((MethodInvoker)delegate() 
     { 
      AddRtf(text); 
     }); 
    } 
    else 
    { 
     rtb.Rtf = @"{\rtf1\ansi This is in \b bold\b0.}"; // this works 
     rtb.Rtf = @"{\rtf1\ansi This "+text+"is in \b bold\b0.}"; // this not 

    } 

} 

Cependant, ne fonctionne pas, je ne vois pas le format RTF en passant l'argument « texte ».

Quel sera le problème?

En fait, j'ai besoin d'une solution simple pour mettre à jour un RichTextBox avec COLOR, BOLD, UNDERLINE et quelques URL dans un texte. J'ai écrit quelques fonctions pour cela comme rtb.AddLink() .AddBold() et ainsi de suite, y compris une belle extension pour l'ajout d'URL, mais semble plus logique pour passer le format RTF et laisser le contrôle pour mettre à jour le formatage. Mais cela m'obligera à casser le texte dans chaque point où j'ai besoin de quelque chose dans BOLD ou quoi que ce soit.

Je pense que le HTML sera plus pratique mais j'ai besoin d'un simple analyseur, au moins plus simple que HTMLAgilitypack.

Si simple écriture en une ligne:

log.write("<font color="red">This is error</font> and this is the link... etc") 

Toute personne a une solution simple pour cela?

Répondre

2

Vous devez échapper à la \ dans la deuxième partie de la chaîne:

@"{\rtf1\ansi This "+text+"is in \\b bold\\b0.}" 
           ^^  ^^ 

ou utiliser un nouveau @

@"{\rtf1\ansi This "[email protected]"is in \b bold\b0.}" 
         ^
+0

oopss :) Merci, le @ en partie 2'nd sera être d'accord. – orfruit

+0

Je ne peux pas accepter comme réponse, la page dit "Une erreur est survenue" ... – orfruit