2012-02-18 3 views
0

ОК в моей записной книжке, как программа, я хочу напечатать текст как код, чтобы я хотел, чтобы зарезервированные слова были напечатаны синим цветом, а текст был на краю любых идей, как это сделать? ? Это то, что у меня есть до сих пор.Печать C# зарезервированных ключевых слов в цветах

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

зачем изобретать то, что уже там и доступны бесплатно? используйте Scintilla.NET как textArea в своем приложении ... http://scintillanet.codeplex.com/ –

+1

Потому что это для школы, и я должен сделать это сам. (К сожалению) –

+1

Erm, подождите, вы просите помощи сделай сам? Используйте тег [домашняя работа]. –

ответ

0

Создать HashSet держит зарезервированные слова

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

Тогда вам придется найти идентификаторы, содержащиеся в текстовой строке. Идентификаторы - это последовательности символов, начинающиеся с буквы или подчеркивания и состоящие из букв, символов подчеркивания и цифр.

После того, как вы нашли идентификатор, проверьте, является ли это зарезервированное ключевое слово или не

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

Проблема заключается в том, как найти идентификаторы. Я использую split (''), но если человек вводит 2 или более пробелов, он читает только 1. Я объясняю это правильно? –

+0

Вы можете указать это с помощью параметров разделения строк: 's.Split (new char [] {''}, StringSplitOptions.RemoveEmptyEntries);' –

+0

Если строка может содержать пунктуации и другие специальные символы, вы можете использовать Regex для поиска слов , 'var matches = Regex.Matches (s, @" \ w + ");'. 'foreach (совпадение совпадений в матчах) {...}'. Матчи сообщают вам позиции ('match.Index') и длины (' match.Length') слов и самих слов ('match.Value'). –

Смежные вопросы