如何更改richTextBox中特定字符串的颜色

时间:2016-11-13 21:52:40

标签: c# string text colors richtextbox

我尝试将特定字符串的颜色更改为richTextBox,并将其中的文本文档打开为已存在的字符串,或通过richTextBox添加以保存其他文本并保持黑色除外具体路线。

我进入richTextBox_TextChanged事件,但对我来说不合适。它可以很好地改变特定字符串的文本并使其他文本保持黑色,但在所有情况下我都有相同的两个问题,首先:

如果我将文字添加到richTextBox与其他单词或字符合并的特定彩色红色字符串中,例如:

如果文本文档内容是:

some string
some string
red string

如果我添加类似的东西:

some string
some string
xred string 

或:

some string
some string
red stringx

结果变为秒,如果我添加另一个等于"red string"的字符串:

some string
some string
red stringx        // << This line remains red
red string         // << and this does not changes and remains black

另一个问题是,如果我在richTextBox中的红色字符串后面写文字,那么写作阶段的所有后续文字也会变成红色。

例如,必须为红色的字符串是:

string Str = "red string";

这样:

   Color aColor = Color.FromName(Str.Split(' ')[0]);
   if (richTextBox1.Text.Contains(Str) && aColor != Color.Red)
   {
       richTextBox1.Select(richTextBox1.Text.IndexOf(Str), Str.Length);
       richTextBox1.SelectionColor = Color.Red;
   }

或者这样:

   Color aColor = Color.FromName(Str.Split(' ')[0]);
   if (richTextBox1.Text.Contains(Str) && aColor != Color.Red)
   {
       richTextBox1.Find(Str); 
       richTextBox1.SelectionColor = Color.Red;
   }

或者这样,可以包含列出的字符串,以便在需要时以string[] words = { "specword1", "specword2" };的方式更改每种颜色的颜色,但在这种情况下只是以不同的方式显示,只需要上面相同且唯一需要的值,并清空string[] words

  string[] words = { "" };
  Color[] colors = { Color.Red };
  for (int i = 0; i < words.Length; i++)
  {
        string word = words[i];
        Color color = colors[i];
     {
        richTextBox1.Find(Str);
        richTextBox1.SelectionColor = color;
     }
  }

我在所有尝试中都遇到了相同的两个问题,如果我将它与Form1_Load一起使用,它就不会对颜色进行任何更改。

所以我想知道这个案例可以解决什么问题,只有一件事情可以想到,但不确定这是否是解决这些问题的正确方法:

我不确定怎么做,但不知何故不能编辑红色字符串,它总是在文本文档的单独行上,同时不允许手动将其写入或粘贴到richTextBox

无论如何,如果它可以帮助解决第一个问题,似乎没有帮助避免在红色字符串之后更改后续文本的颜色。

1 个答案:

答案 0 :(得分:1)

richTextBox_TextChanged内检查比较

时的整行文字
string str = "red string";
for(int i=0; i<richTextBox1.Lines.Length; i++) 
{ 
   string text = richTextBox1.Lines[i];
   richTextBox1.Select(richTextBox1.GetFirstCharIndexFromLine(i), text.Length); 
   if(text ==str)
   {
    richTextBox1.SelectionColor = Color.Red;
   }else
   {
     richTextBox1.SelectionColor = Color.Black;
   }    
 }

对于多种颜色,我会使用字典

var dictionary = new Dictionary<string, System.Drawing.Color>();
    dictionary.Add("red color", System.Drawing.Color.Red);
    dictionary.Add("Blue color", System.Drawing.Color.Blue);
//as above example you can use for loop and get each line of rich textbox
string linefromTextBox = "Blue color";
//then check that line contain of of text in the dictionaly 
if (dictionary.ContainsKey(linefromTextBox))
{
   // if key found then you can get the color as below
   // asign this as SelectionColor 
   //before that you need to Select the line from rich text box as above example
   var color = dictionary[linefromTextBox];
}