2016-07-27 3 views
2

Ich habe eine richTextBox, die ich benutze, damit der Benutzer die XML-Datei sehen und sie bearbeiten lassen kann. Ich habe Code, der die Keyword-Farben in eine von mir angegebene Farbe ändert. Dies ist die Methode, die ich benutze:Wenn ich neben einer farbigen Zeichenfolge klicke, verwendet richttextbox diese Farbe anstelle von schwarz

private void CheckKeyword(string word, Color color, int startIndex) 
    { 
     if (this.richTextBox.Text.Contains(word)) 
     { 
      int index = -1; 
      int selectStart = this.richTextBox.SelectionStart; 
      while ((index = this.richTextBox.Text.IndexOf(word, (index + 1))) != -1) 
      { 
       this.richTextBox.Select((index + startIndex), word.Length); 
       this.richTextBox.SelectionColor = color; 
       this.richTextBox.Select(selectStart, 0); 
       this.richTextBox.SelectionColor = Color.Black; 
      } 
     } 
    } 

Das Problem, das ist, wenn ich near a coloured string klicken, fange ich in that specific colour.

eingeben weiß ich, warum es passiert, aber nicht wissen, wie es zu beheben.

Antwort

0

Sie müssen feststellen, ob sich Ihr Cursor in KeyDown "innerhalb" eines Schlüsselwortbereichs befindet oder nicht, also verbinden Sie das KeyDown-Ereignis und versuchen Sie, diesen Code zu verwenden. Ich bin sicher, dass es eine effizientere Art und Weise, um zu bestimmen, ob Ihr Cursor in einem klammert Schlüsselwort ist, aber dies scheint die Aufgabe zu erledigen:

void rtb_KeyDown(object sender, KeyEventArgs e) { 
    int openIndex = rtb.Text.Substring(0, rtb.SelectionStart).LastIndexOf('<'); 
    if (openIndex > -1) { 
    int endIndex = rtb.Text.IndexOf('>', openIndex); 
    if (endIndex > -1) { 
     if (endIndex + 1 <= this.rtb.SelectionStart) { 
     rtb.SelectionColor = Color.Black; 
     } else { 
     string keyWord = rtb.Text.Substring(openIndex + 1, endIndex - openIndex - 1); 
     if (keyWord.IndexOfAny(new char[] { '<', '>' }) == -1) { 
      this.rtb.SelectionColor = Color.Blue; 
     } else { 
      this.rtb.SelectionColor = Color.Black; 
     } 
     } 
    } else { 
     this.rtb.SelectionColor = Color.Black; 
    } 
    } else { 
    this.rtb.SelectionColor = Color.Black; 
    } 
} 
+0

Thank you !!!! Das hat perfekt funktioniert! – MosesTheHoly

Verwandte Themen