2016-04-20 15 views
0

私は、RichTextBoxコントロールにコードを入力する、C#Htmlエディタアプリケーションを作成しています。私は、リッチテキストボックスがするHTML構文は、例えば次のように、色で強調表示されますメモ帳++およびその他のコードエディタのように動作します:C#のWindowsフォームでRichTextBoxのHTML構文を強調表示する方法は?

Example

どのように私はCでこれを確立することができます。#ウィンドウがリッチテキストボックスを形成しますか?私はほとんどどこでも検索し、私を助けたものは見つけられませんでした。これは私がこれまで試したものですが、私は私が望む結果得られません。

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

[this](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

ありがとうございます。私は今あなたのコードを試してみるつもりです。シンティラについては、プロジェクトにインポートする方法がわかりません。どうやって教えてくれますか? – Angel

+0

私自身もシンチラを使っていません。 CodPlexページで提供されている詳細をたどったところ、RichTextBoxの代わりに提供されているScintillaコントローラを使用できるはずです。 [このページ](http://scintillanet.codeplex.com/wikipage?title=ScintillaNET%20Types&referringTitle=Documentation)、[Scintilla Documentation](http://www.scintilla.org/ScintillaDoc.html)をお読みください。 )を親サ​​イトに追加します。 – fujiFX

関連する問題