0

可能重复:
如何为richTextBox 中的特定文本部分着色?

我有这个功能:

private void richTextBoxLoadKeys(Dictionary<string, List<string>> dictionary, string FileName)
        {
            string line = System.String.Empty;
            using (StreamReader sr = new StreamReader(keywords))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    string[] tokens = line.Split(',');
                    dictionary.Add(tokens[0], tokens.Skip(1).ToList());
                    richTextBox2.AppendText("Url: " + tokens[0] + " --- " + "Localy KeyWord: " + tokens[1]+Environment.NewLine);
                    AppendText(richTextBox2, "Url: ", Color.Red);
                }
                sr.Close();
            }
        }

我有函数AppendText:

public void AppendText(RichTextBox box, string text, Color color)
        {
            box.SelectionStart = box.TextLength;
            box.SelectionLength = 0;
            box.SelectionColor = color;
            box.AppendText(text);
            box.SelectionColor = box.ForeColor;
        } 

在richTextBox 我有例如:

Url: http://www.google.com --- Localy KeyWord: google
Url: http://www.cnet.com --- Localy KeyWord: cnet
Url: http://www.g.com --- Localy KeyWord: g

尝试将其着色为红色时的结果是,第一个 Url: 为黑色,然后后面的两个为红色,最后仅使用 Url: 为红色添加新行。

我想要做的是将 URL 用红色着色:它自己的链接用黄色 --- 用绿色表示 localy 关键字:用粉红色和 google 或 cnet 或 g 用蓝色。

我希望每行中文本的每个部分都采用另一种颜色。

解决了它:

void AppendText()
        {

            int len = this.richTextBox2.TextLength;
            int index = 0;
            int lastIndex = this.richTextBox2.Text.LastIndexOf("Url: ");

            while (index < lastIndex)
            {
                this.richTextBox2.Find("Url: ", index, len, RichTextBoxFinds.None);
                this.richTextBox2.SelectionColor = Color.Red;
                index = this.richTextBox2.Text.IndexOf("Url: ", index) + 1;
            }
        }
4

2 回答 2

0

解决了这个问题:

void AppendText(string text,Color color)
        {

            int len = this.richTextBox2.TextLength;
            int index = 0;
            int lastIndex = this.richTextBox2.Text.LastIndexOf(text);

            while (index < lastIndex)
            {
                this.richTextBox2.Find(text, index, len, RichTextBoxFinds.None);
                this.richTextBox2.SelectionColor = color;
                index = this.richTextBox2.Text.IndexOf(text, index) + 1;
            }
        }
于 2012-10-15T12:30:20.500 回答
0

你必须Select在设置之前打电话SelectionColor。下面是示例代码。

box.Select(0, 10);
box.SelectionColor = color; 
于 2012-10-15T09:44:04.297 回答