Multiple colors in a C# .NET label

后端 未结 11 1711
無奈伤痛
無奈伤痛 2020-11-27 03:54

I\'m looking for a way to display multiple colors in a single C#/.NET label. E.g the label is displaying a series of csv separated values that each take on a color dependin

11条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-27 04:24

    I'm using colored labels quite often to mark keywords in red color etc. Like in Phil Wright's answer I use a RichTextBox control, remove the border and set the background color to SystemColors.Control.

    To write colored text the control is first cleared and then I use this function to append colored text:

    private void rtb_AppendText(Font selfont, Color color, Color bcolor, 
                            string text, RichTextBox box)
        {
                // append the text to the RichTextBox control
                int start = box.TextLength;
                box.AppendText(text);
                int end = box.TextLength;
    
                // select the new text
                box.Select(start, end - start);
                // set the attributes of the new text
                box.SelectionColor = color;
                box.SelectionFont = selfont;
                box.SelectionBackColor = bcolor;
                // unselect
                box.Select(end, 0);
    
                // only required for multi line text to scroll to the end
                box.ScrollToCaret();
        }
    

    If you want to run this function with "mono" then add a space before every new colored text, or mono will not set new the color correctly. This is not required with .NET

    Usage:

    myRtb.Text = "";
    rtb_AppendText(new Font("Courier New", (float)10), 
                       Color.Red, SystemColors.Control, " my red text", myRtb);
    rtb_AppendText(new Font("Courier New", (float)10), 
                       Color.Blue, SystemColors.Control, " followed by blue", myRtb);
    

提交回复
热议问题