我创建了RichTextBox并添加了以下代码:
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
//( )
int selectionStart = richTextBox1.SelectionStart;
string helpText = richTextBox1.Text;
int closerPos;
for (int i = 0; i < helpText.Length; i++)
{
if (helpText[i] == '(')
{
selectionStart = richTextBox1.SelectionStart;
closerPos = helpText.Substring(i).IndexOf(')') + i;
helpText = helpText.Substring(i + 1, closerPos - i - 1);
richTextBox1.Text = richTextBox1.Text.Remove(i + 1, closerPos - i - 1);
richTextBox1.Select(i + 1, 0);
richTextBox1.SelectionColor = Color.Red;
richTextBox1.SelectedText = helpText;
richTextBox1.SelectionColor = Color.Black;
helpText = richTextBox1.Text;
richTextBox1.SelectionStart = selectionStart;
}
}
}此代码应将( )之间的文本涂上颜色。例如:
(需要着色)文本(sdadsasd)
()之间的文本需要用红色表示。但只有最后一段文字是彩色的。我怎么才能修好它?
发布于 2013-03-27 22:48:46
如果条件允许的话,你只会产生第一次妄想。
尝试像helpText.Split('(');那样拆分文本
然后迭代它,并执行您的逻辑。
发布于 2013-03-27 23:24:03
我认为你不需要逐字节移动就可以完成这个任务。您可以尝试使用IndexOf方法来完成它。
这是我一直在想的:
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
string rbText = richTextBox1.Text;
int position = 0;
int startBrace = rbText.IndexOf('(', position) + 1;
while (startBrace != -1)
{
position = rbText.IndexOf(')', startBrace);
if (position != -1)
{
richTextBox1.Select(startBrace, position - startBrace);
richTextBox1.SelectionColor = Color.Red;
startBrace = rbText.IndexOf('(', position) + 1;
}
else
break;
}
}请记住,我还没有完全测试这段代码。
发布于 2013-03-28 00:30:56
我已经看到了一个潜在的问题,当helpText只是一个单变量字符串时,它就被用作一个数组。尝试将整个helpText分解为一个char数组,然后遍历该数组以找到您的括号。
https://stackoverflow.com/questions/15670783
复制相似问题