Benutzer mit den meisten Antworten
C# RichTextBox Wortfarbe ändern

Frage
-
Hallo,
ich möchte gerne eine Art minimalistischen Batch-Editor schreiben, ich habe verschiedene Schlüsselwörter, die in der Box farbig dargestellt werden sollen. Es werden nicht nur alle Keywords farbig dargestellt auch der Inhalt anderer Worte, und die Cursorposition ist immer hinten am Text, bzw. man kann nicht mitten im Text bearbeiten. Wie kann ich dieses Problem am besten lösen?
public partial class executeBatch : Form { internal string[] keywords = { "@echo", "off", "on", "color", "assoc", "attrib", "break", "bootcfg", "call", "cd", "chdir", "chkdsk", "cls", "cmd", "comp", "Copy", "date", "del", "dir", "wmic", "xcopy", "vol", "help", "ver", "start", "rmdir", "rem", "ren", "rename", "replace", "rd", "path", "cd..", "prompt", "move", "if", "goto", "for", "exit", "format", "diskpart" }; internal string[] apps = { "calc", "shutdown", "taskmgr" }; internal string[] special = { "kill" }; private void richTextBox1_TextChanged(object sender, EventArgs e) { foreach (string s in keywords) { int index = richTextBox1.Text.IndexOf(s); if ( index> -1) { richTextBox1.Select(index, s.Length); richTextBox1.SelectionColor = Color.Orange; } } richTextBox1.DeselectAll(); richTextBox1.SelectionColor = Color.Black; foreach (string s in apps) { int index = richTextBox1.Text.IndexOf(s); if (index > -1) { richTextBox1.Select(index, s.Length); richTextBox1.SelectionColor = Color.Green; } } richTextBox1.DeselectAll(); richTextBox1.SelectionColor = Color.Black; foreach (string s in special) { int index = richTextBox1.Text.IndexOf(s); if (index > -1) { richTextBox1.Select(index, s.Length); richTextBox1.SelectionColor = Color.Red; } } richTextBox1.DeselectAll(); richTextBox1.Select(richTextBox1.Text.Length, 0); richTextBox1.SelectionColor = Color.Black; } }
Antworten
-
Dafür musst du entsprechend prüfen, ob das Keyword ein Leerzeichen davor und dahinter hat oder ob das Wort am Anfang/Ende steht.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Donnerstag, 9. Oktober 2014 10:21
- Als Antwort markiert Fragender99 Freitag, 10. Oktober 2014 16:44
Alle Antworten
-
Hallo,
du musst dir am Anfang des Umfärbens einfach merken wo der Cursor steht und ihn danach wieder dort hin setzen.private void richTextBox1_TextChanged(object sender, EventArgs e) { var pos = richTextBox1.SelectionStart; //umfärben... richTextBox1.SelectionStart = pos; }
Die ZeilerichTextBox1.Select(richTextBox1.Text.Length, 0);
kann dann am Ende weg fallen, diese würde den Cursor ans Ende setzen.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Donnerstag, 9. Oktober 2014 07:28
-
Danke, es hat was gebracht. Und nun taucht auch schon das nächste Problem auf: Es bleibt farbig, auch wenn das Wort kein Keyword ist!? Manchmal bleibt es orange oder schwarz. Wie kann man das am besten lösen??
- Bearbeitet Fragender99 Mittwoch, 8. Oktober 2014 17:25
-
OK ich habe es überarbeitet, nun habe ich nur ein Problem: Keywords, die eigentlich in Wörtern sind, werden leider auch markiert wie kann man das lösen??
Sonst aber danke für die Hilfe- Bearbeitet Fragender99 Mittwoch, 8. Oktober 2014 18:12
-
Dafür musst du entsprechend prüfen, ob das Keyword ein Leerzeichen davor und dahinter hat oder ob das Wort am Anfang/Ende steht.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Donnerstag, 9. Oktober 2014 10:21
- Als Antwort markiert Fragender99 Freitag, 10. Oktober 2014 16:44