2012-02-18 4 views
0

OK dans mon programme comme le bloc-notes, je veux imprimer le texte comme le code, donc je veux que les mots réservés soient imprimés en bleu et le texte soit dans les marges des idées comment faire? ? C'est ce que j'ai jusqu'ici.Impression C# mots-clés réservés en couleurs

int charPag = 0; 
     int linPag = 0; 
     Font rodFont = new Font("Courier New", (float)10.0); 

     e.Graphics.MeasureString(stringToPrint, txtMain.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, out charPag, out linPag); 
     e.Graphics.DrawString(stringToPrint, txtMain.Font, new SolidBrush(Color.Black), e.MarginBounds, StringFormat.GenericTypographic); 
     stringToPrint = stringToPrint.Substring(charPag); 

     e.Graphics.DrawLine(Pens.Black, e.MarginBounds.Left, e.MarginBounds.Bottom, e.MarginBounds.Right, e.MarginBounds.Bottom); 
     e.Graphics.DrawString(numPag.ToString(), rodFont, Brushes.Black, e.MarginBounds.Right - (numPag.ToString().Length * rodFont.SizeInPoints), e.MarginBounds.Bottom + 5); 
     if (stringToPrint.Length > 0) 
     { 
      e.HasMorePages = true; 
      numPag++; 
     } 
+4

pourquoi réinventer ce qui est déjà là-bas et disponible gratuitement? utilisez Scintilla.NET comme textArea dans votre application ... http://scintillanet.codeplex.com/ –

+1

Parce que c'est pour l'école, et je dois le faire moi-même (malheureusement) –

+1

Euh, attendez, vous demandez de l'aide pour fais le toi-même? Utilisez le tag [devoirs]. –

Répondre

0

Créer une HashSet contenant les mots réservés

public HashSet<string> _reservedWords = 
    new HashSet { "if", "else", "class", "..." }; 

Ensuite, vous devrez trouver les identifiants contenus dans une ligne de texte. Les identificateurs sont des séquences de caractères commençant par une lettre ou un trait de soulignement et consistant en des lettres, des traits de soulignement et des chiffres.

Une fois que vous avez trouvé un identifiant, vérifier si elle est un mot-clé réservé ou non

bool reserved = _reservedWords.Contains(word); 
+0

Le problème est de savoir comment trouver les identifiants. J'utilise la division ('') mais si la personne introduit 2 espaces ou plus, elle ne lit que 1. Je suis en train de l'expliquer? –

+0

Vous pouvez spécifier ceci avec les options de division de chaîne, 's.Split (new char [] {''}, StringSplitOptions.RemoveEmptyEntries);' –

+0

Si la chaîne peut contenir des ponctuations et d'autres caractères spéciaux, vous pouvez utiliser Regex pour trouver des mots , 'var correspond = Regex.Matches (s, @" \ w + ");'. 'foreach (Match match dans les matches) {...}'. Les correspondances vous indiquent les positions ('match.Index') et les longueurs (' match.Length') des mots et les mots eux-mêmes ('match.Value'). –