Autor Beitrag
lapadula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 137
Erhaltene Danke: 7



BeitragVerfasst: Fr 24.02.17 14:50 
Hallo,

ich möchte gerne einen String, in einer RichTextBox, ab einem Hashtag blau färben.

Bsp.: Dies ist ein Text #test noch ein Text.

#test <- soll nun blau sein.

Das habe ich bereits so versucht:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
private void richTextBoxBeschreibung_TextChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < richTextBoxBeschreibung.Lines.Length; i++)
            {
                if (richTextBoxBeschreibung.Text.Contains("#"))
                {
                    string text = richTextBoxBeschreibung.Lines[i];
                    richTextBoxBeschreibung.Select(richTextBoxBeschreibung.Text.IndexOf("#"), 6);
                    richTextBoxBeschreibung.SelectionColor = colorTicketNr(text);
                }
            }
        }
        private Color colorTicketNr(string line)
        {
            if(line.Contains("#")) return Color.Blue;

            return Color.Black;
        }


Das Problem ist, dass wenn ich in die Textbox nun etwas eingeben will, er immer zu dem blau-markierten Text springt. Es liegt wohl an diesem select.
Gibt es da noch eine andere Möglichkeit?
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2008
Erhaltene Danke: 368

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 24.02.17 15:21 
Guten Tag lapadula,

Das Stichwort zu dem Thema wäre Highlighting. Hier findest du einen guten Ansatz dazu.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: lapadula
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 137
Erhaltene Danke: 7



BeitragVerfasst: Fr 24.02.17 16:16 
Ah, vielen Dank.

hab den Code frecherweise mal so übernommen und es funktioniert nun wie es soll :)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
Regex regexTicketNr = new Regex(@"(?<=#)\w+");
        private void richTextBoxBeschreibung_TextChanged(object sender, EventArgs e)
        {
            // Selektion merken
            int selPos = richTextBoxBeschreibung.SelectionStart;
            int selLength = richTextBoxBeschreibung.SelectionLength;

            // Highlighting reseten
            richTextBoxBeschreibung.SelectAll();
            richTextBoxBeschreibung.SelectionColor = Color.Black;

            // neues Highligthing setzen 
            foreach (Match m in regexTicketNr.Matches(this.richTextBoxBeschreibung.Text))
            {
                richTextBoxBeschreibung.Select(m.Index, m.Length);
                richTextBoxBeschreibung.SelectionColor = Color.Blue;
            }

            // alte Selektion wieder herstellen
            richTextBoxBeschreibung.SelectionStart = selPos;
            richTextBoxBeschreibung.SelectionLength = selLength;
        }