Entwickler-Ecke

WinForms - RichTextBox Text färben


lapadula - Mi 03.08.16 20:39
Titel: RichTextBox Text färben
Hallo, ich habe ein Verständnisproblem beim folgenden Problem.

In einer RichTextBox werden die Zeilen, die je nachdem was bei der If-Abfrage rauskommt grün, rot oder schwarz gefärbt.

Eine Möglichkeit dafür wäre zB.

C#-Quelltext
1:
// deleted                    

Moderiert von user profile iconTh69: s. unten

Gibt es dafür eine elegantere Lösung, bzw eine kompaktere?


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Mi 03.08.2016 um 22:17


C# - Do 04.08.16 06:51

Bin ich der Einzige der keinen Beispielcode sieht oder hat ihn der TE einfach vergessen?


Palladin007 - Do 04.08.16 07:22

Ich würde eher darauf tippen, dass jemand was kaputt gemacht hat, hab gestern den Code nämlich noch gesehen :D
Vielleicht Christian? :roll:


Christian S. - Do 04.08.16 07:35

:gruebel: Ich hab eigentlich nur verschoben und zwei Tags eingefügt. :nixweiss:


Palladin007 - Do 04.08.16 07:39

Hat sich da ein Käfer versteckt? :P


Der Code war auf jeden Fall da, er hat die Selection von der RichTextBox geändert um dann für die aktuelle Auswahl die Farbe zu ändern.
Wann genau weiß ich aber auch nicht mehr, war glaube eher später.


Naja, dann muss wohl lapadula nach helfen ^^


lapadula - Fr 05.08.16 22:34

ups da hab ich wohl beim editieren was falsch gemacht :lol:

hier nochmal der Beispielcode


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:
private void highlightLineContaining(RichTextBox rtb, int line, string search, Color color)
        {
            int c0 = rtb.GetFirstCharIndexFromLine(line);
            int c1 = rtb.GetFirstCharIndexFromLine(line + 1);
            if (c1 < 0) c1 = rtb.Text.Length;
            rtb.SelectionStart = c0;
            rtb.SelectionLength = c1 - c0;
            if (rtb.SelectedText.Contains(search))
                rtb.SelectionColor = color;
            rtb.SelectionLength = 0;
        }

        private void DisplayScript()
        {
            this.Script.Clear();
            for(int i = 0; i < this.Scripter.Script.Querys.Length; i++)
            {
                string sLine = i.ToString("00000") + " ["
                    + this.Scripter.Script.Querys[i].iAffectedRows.ToString("000") + "]   |"
                    + this.Scripter.Script.Querys[i].sQuery + " --> "
                    + this.Scripter.Script.Querys[i].sError + "\n";
                this.Script.Text += sLine;
                
                if(this.Scripter.Script.Querys[i].bExecuted)
                    this.highlightLineContaining(this.Script, i, sLine, Color.Green);
                else if (this.Scripter.Script.Querys[i].sError != string.Empty)
                    this.highlightLineContaining(this.Script, i, sLine, Color.Red);                
                else
                    this.highlightLineContaining(this.Script, i, sLine, Color.Black);                
            }
        }


Hab das nun alles in die DisplayScript()-Methode gepackt und per if-Bedingung abgefragt, so klappt das und nun wird auch der Text gefärbt auch wenn es einen Zeilenumbruch gab, vorher hat er das nicht gemacht.


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:
34:
35:
36:
private void DisplayScript()
        {
            this.rtbScript.Clear();

            for(int i = 0; i < this.Scripter.Script.Querys.Length; i++)
            {
                sLine = this.Scripter.Script.Querys[i].sQuery + " " + Scripter.Script.Querys[i].sError + "\n";

                if (this.Scripter.Script.Querys[i].bExecuted)
                {

                    int start = rtbScript.TextLength;
                    rtbScript.AppendText(sLine);
                    rtbScript.Select(start, sLine.Length);
                    
                    rtbScript.SelectionColor = Color.Green;
                    
                }
                else if (this.Scripter.Script.Querys[i].sError != string.Empty)
                {
                    int start = rtbScript.TextLength;
                    rtbScript.AppendText(sLine);
                    rtbScript.Select(start, sLine.Length);

                    rtbScript.SelectionColor = Color.Red;

                }
                else
                {
                    int start = rtbScript.TextLength;
                    rtbScript.AppendText(sLine);
                    rtbScript.Select(start, sLine.Length);

                    rtbScript.SelectionColor = Color.Black;
 
                }


Delete - Fr 05.08.16 22:53

- Nachträglich durch die Entwickler-Ecke gelöscht -


lapadula - Di 16.08.16 15:48

Danke, so wäre es noch kompakter.