2016-04-20 5 views
0

Я пишу приложение редактора C# Html, в котором вы вводите код в элементе управления RichTextBox. Я хочу, чтобы RichTextBox вести себя как Notepad ++ и других редакторов кода, в котором синтаксис Html подсвечивается в цветах, как это, например:Как выделить синтаксис HTML в окнах форм C# RichTextBox?

Example

Как я могу установить это в C# Windows Form RichTextBox? Я искал почти везде и не нашел ничего, что помогло мне. Это то, что я пробовал до сих пор, но я не даю результата, который я хочу:

private void SyntaxHighlight() 
     { 
      string[] tags = { "html","head","body","a","b","img","strong","p","h1","h2","h3","h4","h5","h6","embed","iframe","span","form", 
          "button","input","textarea","br","div","style","script","table","tr","td","th","i","u","link","meta","title"}; 
      foreach (string s in tags) 
      { 
       richTextBox1.Find("<" + s); 
       richTextBox1.SelectionColor = Color.Blue; 
       richTextBox1.Find(">"); 
       richTextBox1.SelectionColor = Color.Blue; 
      } 

      string[] attributes = { "href","src","height","width","rowspan","colspan","target","style","onclick","id","name","class"}; 
      foreach (string s in attributes) 
      { 
       richTextBox1.Find(s + "="); 
       richTextBox1.SelectionColor = Color.Red; 
      } 
     } 

Может кто-нибудь мне помочь? Что мне следует писать внутри метода SyntaxHighlight()? может кто-нибудь дать мне соответствующий код? Спасибо

+0

Вы проверили [это] (http://stackoverflow.com/questions/11183599/rich-text-box-how-to-highlight-text-block) вопрос и его решение? – fujiFX

+1

@fujiFX да, но это не то, что я хочу, хочу выделить текст не фон – Angel

+0

Каков результат, который вы получаете с предоставленным кодом? – fujiFX

ответ

3

В пределах кода вы только найти 1-е вхождение HTML тега и его выделения. Но вместо этого вы должны прокручивать весь контент с богатым текстом, чтобы найти происходящие события одного и того же текста. Я просто быстро высмеял, основываясь на вашем точном коде, пожалуйста, проверьте его.

private void highlightHTMLText() 
    { 
     string[] tags = { "html","head","body","a","b","img","strong","p","h1","h2","h3","h4","h5","h6","embed","iframe","span","form", 
         "button","input","textarea","br","div","style","script","table","tr","td","th","i","u","link","meta","title"}; 
     foreach (string s in tags) 
     { 
      findAndHighlight("<" + s, Color.Blue); 
      findAndHighlight("</" + s, Color.Blue); 
      findAndHighlight(">", Color.Blue); 
     } 

     string[] attributes = { "href", "src", "height", "width", "rowspan", "colspan", "target", "style", "onclick", "id", "name", "class" }; 
     foreach (string s in attributes) 
     { 
      findAndHighlight(s + "=", Color.Red); 
     } 
    } 

    private void findAndHighlight(string sSearchStr, Color oColor) 
    { 
     int index = richTextBox1.Text.IndexOf(sSearchStr); 
     while (index != -1) 
     { 
      richTextBox1.Select(index, sSearchStr.Length); 
      richTextBox1.SelectionColor = oColor; 

      index = richTextBox1.Text.IndexOf(sSearchStr, index + sSearchStr.Length); 
     } 
    } 

Далее согласно this ответа вы должны быть в состоянии использовать ту же утилиту библиотеки Scintilla используется Notepad ++ самих. Как указывалось, вам не нужно заново изобретать колесо, но, как разработчик, я, очевидно, предпочитаю свой собственный ресурс (это только я;)). Надеюсь это поможет.

+0

Спасибо. Я собираюсь попробовать ваш код сейчас. что касается Scintilla, я не знаю, как импортировать его в свой проект. можете ли вы сказать мне, как это сделать? – Angel

+0

Я сам тоже не использовал Scintilla. Просто просмотрел детали, представленные на их странице CodPlex, и кажется, что мы можем использовать предоставленный контроллер Scintilla вместо «RichTextBox». Пожалуйста, прочитайте на [этой странице] (http://scintillanet.codeplex.com/wikipage?title=ScintillaNET%20Types&referringTitle=Documentation), а также [Документация Scintilla] (http://www.scintilla.org/ScintillaDoc.html) на их родительском сайте. – fujiFX

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

  • Нет связанных вопросов^_^