Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.12.2014, 21:03

C# Textfarbe eines Wortes in TextBox ändern

Hallo
In C# ändert man ja die Textfarbe so:

C#-Quelltext

1
2
3
4
if (Document.Text == "#include")
            {
            Document.ForeColor = System.Drawing.Color.Blue;
            }

Jedoch ändert sich dann ja auch der folgende Text, wie muss ich es ändern damit es nur das Wort ändert? Also ich möchte nur dass "#include" blau gefärbt wird und nichts anderes.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

15.12.2014, 21:06

Stichwort RichTextBox. Eine normale Textbox kann das nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

15.12.2014, 21:37

Stichwort RichTextBox. Eine normale Textbox kann das nicht.

Danke aber ich google die ganze Zeit aber irgendwie klappt nix. Kannst du mir einen Lösungsvorschlag geben?

4

15.12.2014, 21:44

Habs geschafft!

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private void ApplySyntaxHighlighting()
        {
            Regex keyWordsBlue = new Regex("if |then |else |fi |true |while |do |done |set |export |bool |break |case |class |const |for |foreach |goto |in |void |if\n|then\n|else\n|fi\n|true\n|while\n|do\n|done\n|set\n|export\n|bool\n|break\n|case\n|class\n|const\n|for\n|foreach\n|goto\n|in\n|void\n");
            // Select all and set to black so that it's 'clean'
            Document.SelectAll();
            Document.SelectionColor = Color.Black;

            // Then unselect and scroll to the end of the file
            Document.ScrollToCaret();
            Document.Select(Document.Text.Length, 1);

            // Start applying the highlighting... Set a value to selPos
            int selPos = Document.SelectionStart;

            foreach (Match keyWordMatch in keyWordsBlue.Matches(Document.Text))
            {
                // Select the word..
                Document.Select(keyWordMatch.Index, keyWordMatch.Length);
                // Change it to blue
                Document.SelectionColor = Color.Blue;
                // Set it to bold for this example
                Document.SelectionFont = new Font(Document.SelectionFont, FontStyle.Bold);
                // Move cursor back to where it was
                Document.SelectionStart = selPos;
                // Change the default font color back to black.
                Document.SelectionColor = Color.Black;
            }
        }
        private void Document_TextChanged_1(object sender, EventArgs e)
        {
            ApplySyntaxHighlighting();
            
        }

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

15.12.2014, 22:30

Bei den Regex musst du ein wenig aufpassen. Du hast zum Beispiel "if" und "if\n" drin. Wenn dein Text jetzt "if\ntesting" wäre dann würde er nur "if" matchen. Wenn du die Reihenfolge umtauschst dann sollte es klappen. Hast du zwei verschiedene Reguläre Ausdrücke a und b wobei a Präfix von b ist so muss b in der Reihenfolge vor a stehen.
In deinem Fall:
a = "if"
b = "if\n"
Regex = "if\n|if"
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

16.12.2014, 06:34

Ist das so, auch wenn es greedy arbeitet?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

16.12.2014, 09:16

So wie es in seinem Code steht müsste es so arbeiten wie ich geschrieben habe. Gibt es die Möglichkeit den Regex greedy arbeiten zu lassen? Andere Implementierungen tun das ja durchaus und oft ist es ja das gewünschte Verhalten.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

17.12.2014, 06:41

k.A. ob man das greedy formulieren kann. War eine reine Neugierfrage. Jeder hat schon mal mit Regex gearbeitet, aber keiner wirklich intensiv ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige