我尝试将特定字符串的颜色更改为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
。
无论如何,如果它可以帮助解决第一个问题,似乎没有帮助避免在红色字符串之后更改后续文本的颜色。
答案 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];
}