2010-05-18 9 views
1

J'essaie actuellement de créer un TextBox pour mon interface graphique avec XNA, et je me demandais comment trouver du texte balisé dans une chaîne.
Pour instanceI ont ce genre de texte:
Mise en forme du texte en C# avec XNA

Hey there, I was <r>going to</r> the <b>Mall</b> today! 

donc la balise <r> représenterait le texte en rouge et la balise <b> représenterait le texte en bleu.
Et je veux savoir exactement où le texte rouge commence et où le texte bleu commence afin que je puisse les rendre séparément.
Avez-vous des suggestions sur ce qu'il faut faire à ce sujet et que faire pour cela?

Merci d'avance.

Répondre

-1

Eh bien, vous pouvez simplement analyser la ligne et lorsque vous atteignez une propriété de couleur de votre texte pour qu'il devienne bleu, mais il faudra que ce soit un appel de rendu séparé sinon la chaîne entière deviendra bleue. Donc, si vous créez une nouvelle chaîne quand vous trouvez une balise, alors définissez la propriété color puis restaurez cette chaîne, cela devrait fonctionner.

+0

Ce n'est pas une manière très flexible de faire les choses, et elle n'est pas expliquée avec une certaine clarté. – mikeschuld

+0

Ouais mon mal j'étais pressé = / –

1

Je vous conseille de faire cela avec deux méthodes

D'abord, ont une méthode qui peut prendre votre chaîne et retourner une collection de paires de couleurs de chaîne:

struct StringColorPair { 
    public string myText;  // the text 
    public Color myColor;  // the color of this text 
    public int myOffset;  // characters before this part of the string 
           // (for positioning in the Draw) 
} 

public List<StringColorPair> ParseColoredText(string text) { 
    var list = new List<StringColorPair>();  

    // Use a regex or other string parsing method to pull out the 
    // text chunks and their colors and then for each set of those do: 
    list.Add(
     new StringColorPair { 
      myText = yourParsedSubText, 
      myColor = yourParsedColor, 
      myOffset = yourParsedOffset } 
    ); 

    return list; 
} 

Ensuite, vous auriez besoin d'une méthode de tirage comme ceci:

public void Draw(List<StringColorPair> pairs) { 
    foreach(var pair in pairs) { 
     // Draw the relevant string and color at its needed offset 
    } 
}