2016-04-20 6 views
0

Ich schreibe eine C# HTML-Editor-Anwendung, in der Sie den Code in einem RichTextBox-Steuerelement eingeben. Ich möchte das RichTextBox wie Notepad verhalten ++ und andere Code-Editoren, in dem die HTML-Syntax in den Farben hervorgehoben wird, wie dies zum Beispiel:Wie HTML-Syntax in C# -Formular RichTextBox hervorheben?

Example

Wie kann ich die # Fenster RichTextBox in C etablieren bilden? Ich habe fast überall gesucht und nichts gefunden, was mir geholfen hat. Dies ist, was ich bisher versucht habe, aber ich gebe das Ergebnis nicht, das ich will:

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; 
      } 
     } 

Kann mir jemand helfen? Was soll ich innerhalb der SyntaxHighlight() Methode schreiben? Kann mir jemand den passenden Code geben? Danke

+0

Haben Sie [diese] (http://stackoverflow.com/questions/11183599/rich-text-box-how-to-highlight-text-block) Frage und ihre Lösung ausgecheckt? – fujiFX

+1

@fujiFX ja, aber das ist nicht was ich will, ich möchte den Text nicht den Hintergrund markieren – Angel

+0

Was ist das Ergebnis, das Sie mit Ihrem bereitgestellten Code bekommen? – fujiFX

Antwort

3

innerhalb des Codes Sie nur das erste Auftreten des HTML-Tags zu finden und markieren es. Stattdessen sollten Sie den gesamten Rich-Text-Inhalt durchgehen, um fortlaufende Vorkommen desselben Texts zu finden. Ich habe nur kurz auf Ihren genauen Code gespottet, bitte schauen Sie es sich an.

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); 
     } 
    } 

Weitere gemäß this Antwort sollte es möglich sein Verwendung derselben Utility-Bibliothek Scintilla von Notepad verwendet, um ++ selbst. Wie bereits erwähnt, müssen Sie das Rad nicht neu erfinden, aber als Entwickler bevorzuge ich natürlich mein eigenes util (es ist nur ich;)). Hoffe das hilft.

+0

Danke. Ich werde jetzt deinen Code ausprobieren. Was Scintilla betrifft, weiß ich nicht, wie ich es in mein Projekt importieren soll. Kannst du mir sagen wie? – Angel

+0

Ich selbst habe Scintilla auch nicht benutzt. Habe einfach die Details auf ihrer CodPlex-Seite durchgelesen und es scheint, dass wir in der Lage sein sollten, den bereitgestellten Scintilla-Controller anstelle der 'RichTextBox' zu verwenden. Bitte lesen Sie [diese Seite] (http://scintillanet.codeplex.com/wikipage?title=ScintillaNET%20Types&referringTitle=Documentation) sowie [Scintilla Documentation] (http://www.scintilla.org/ScintillaDoc.html)) auf ihrer übergeordneten Website. – fujiFX