2016-04-20 125 views
0

我正在寫一個c#Html編輯器應用程序,在其中您在RichTextBox控件中鍵入代碼。我想RichTextBox的表現像記事本+ +和其他代碼編輯器中的HTML語法高亮得到的顏色,像這樣的例子:如何在C#窗體RichTextBox中突出顯示HTML語法?

Example

我如何用C建立這一#windows窗體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

在你的代碼中只發現了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的。正如你所指出的,你不需要重新發明輪子,但作爲一名開發人員,我顯然更喜歡我自己的util(這只是我);)。希望這可以幫助。

+0

謝謝。我現在要嘗試你的代碼。至於Scintilla,我不知道如何將它導入到我的項目中。你能告訴我如何? – Angel

+0

我自己也沒有使用Scintilla。剛剛通過他們的CodPlex頁面提供的細節,似乎我們應該能夠使用提供的Scintilla控制器而不是'RichTextBox'。請閱讀[本頁](http://scintillanet.codeplex.com/wikipage?title=ScintillaNET%20Types&referringTitle=Documentation)以及[Scintilla Documentation](http://www.scintilla.org/ScintillaDoc.html )在他們的父母網站上。 – fujiFX