2014-02-24 11 views
7

Wie kann ich machen, dass, wenn der Benutzer bestimmte Wörter wie "while" oder "if" in einem Rich Textbox eingibt, die Wörter lila ohne irgendwelche Probleme färben? Ich habe verschiedene Codes ausprobiert, aber keiner von ihnen war benutzbar. Die Codes waren wie folgt:Farbspezifische Wörter in RichtextBox

if (richTextBox.Text.Contains("while")) 
    { 
    richTextBox.Select(richTextBox.Text.IndexOf("while"), "while".Length); 
    richTextBox.SelectionColor = Color.Aqua; 
    } 

Außerdem mag ich, dass, wenn der Benutzer das Wort entfernt oder entfernt einen Brief aus dem Wort, das Wort wird auf die Standardfarbe Farbe zurück. Ich mache ein Programm mit einem Code-Editor darin.

Ich verwende Visual C#.

Vielen Dank.

+0

Webformular oder winform verwenden? –

+0

@MicrosoftDN: winform. – user3256753

+1

Scheint so, als ob Sie eine Art Syntax-Highlight wünschen, also schauen Sie sich diesen Beitrag an: [Eine Textbox/richtextbox mit Syntax-Highlighting?] (Http://stackoverflow.com/questions/1087735/a-textbox-richttextbox-that-has -Syntax-Hervorhebung-c) – scheien

Antwort

12

ein Ereignis Rich Box Text hinzufügen geändert,

private void Rchtxt_TextChanged(object sender, EventArgs e) 
     { 
      this.CheckKeyword("while", Color.Purple, 0); 
      this.CheckKeyword("if", Color.Green, 0); 
     } 



private void CheckKeyword(string word, Color color, int startIndex) 
    { 
     if (this.Rchtxt.Text.Contains(word)) 
     { 
      int index = -1; 
      int selectStart = this.Rchtxt.SelectionStart; 

      while ((index = this.Rchtxt.Text.IndexOf(word, (index + 1))) != -1) 
      { 
       this.Rchtxt.Select((index + startIndex), word.Length); 
       this.Rchtxt.SelectionColor = color; 
       this.Rchtxt.Select(selectStart, 0); 
       this.Rchtxt.SelectionColor = Color.Black; 
      } 
     } 
    } 
+0

Bitte als Antwort markieren, wenn es geholfen hat Sie! – Sajeetharan

+0

Ihr Code ist Präfekt. Vielen Dank! Aber wenn ich ein Wort von "while" lösche (Beispiel: "wile"), ändert sich die Farbe nicht wieder in den Standard ??? !!! – user3256753

+1

Um die Farbe zu fixieren, setzen Sie einfach die Vordergrundfarbe vor Ihren Checks – Demetry

2

Dies ist etwas, das Sie tun können, würde ich alle Spiele des Wortes im Fall zu finden, mit einem regulären Ausdruck empfiehlt es oft vorkommt. Denken Sie auch daran, dass der String find eine Liste von Strings außerhalb einer for-Schleife sein könnte, um mehrere Wörter zu berücksichtigen, aber dies sollte Ihnen den Einstieg erleichtern.

//dont foget to use this at the top of the page 
using System.Text.RegularExpressions; 

    private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     string find = "while"; 
     if (richTextBox1.Text.Contains(find)) 
     { 
      var matchString = Regex.Escape(find); 
      foreach (Match match in Regex.Matches(richTextBox1.Text, matchString)) 
      { 
      richTextBox1.Select(match.Index, find.Length); 
      richTextBox1.SelectionColor = Color.Aqua; 
      richTextBox1.Select(richTextBox1.TextLength, 0); 
      richTextBox1.SelectionColor = richTextBox1.ForeColor; 
      }; 
     } 
    } 
1

können Sie richTextBox1_KeyDown Ereignis

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.KeyCode == Keys.Space) 
      { 
       String abc = this.richTextBox1.Text.Split(' ').Last(); 
       if (abc == "while") 
       { 
        int stIndex = 0; 
        stIndex = richTextBox1.Find(abc, stIndex, RichTextBoxFinds.MatchCase); 
        richTextBox1.Select(stIndex, abc.Length); 
        richTextBox1.SelectionColor = Color.Aqua; 
        richTextBox1.Select(richTextBox1.TextLength, 0); 
        richTextBox1.SelectionColor = richTextBox1.ForeColor; 
       } 
      } 
     }