我的RIchTextBox中有以下文字:
foo:baa#done baa
a:b#pending ee
我希望在#
之后和" "
之前突出显示所有内容(espace)
我是怎么做到的?我尝试将end
设为\t
或" "
的IndexOf,但返回-1。
我的代码(未按预期工作):
string[] lines = list.Lines;
string line;
for (int i = 0, max = lines.Length; i < max; i++)
{
line = lines[i];
int start = list.Find("#");
int end = ??? // I tried list.Find("\t") and list.Find(" ")
if (-1 != start || -1 != end)
{
list.Select(start, end);
list.SelectionColor = color;
}
}
list
是RichTextBox
答案 0 :(得分:3)
使用GetLineFromCharIndex()获取Find()方法返回值的行号。然后GetFirstCharIndexFromLine(第+行)来知道下一行的起始位置。这为您提供了突出显示文本所需的SelectionStart和SelectionLength值。
答案 1 :(得分:2)
试试这个:
string[] lines = list.Lines;
string line;
int len = 0;
for (int i = 0, max = lines.Length; i < max; i++)
{
line = lines[i];
int j = i == 0 ? 0 : len;
string str = Regex.Match(line, @"#.*$").Value;
if (!string.IsNullOrEmpty(str))
{
int start = list.Find(str, j, RichTextBoxFinds.None);
if (start != -1)
{
list.Select(start, str.Length);
list.SelectionColor = Color.Red;
}
len += line.Length;
}
}
答案 2 :(得分:1)
也许您应该使用line.IndexOf
代替list.Find
?
简而言之,您似乎在List控件中搜索字符,而不是在字符串行中搜索。