更改以'@'开头的表达式的颜色

时间:2018-01-26 11:31:21

标签: c# winforms infragistics

我需要创建一个winform颜色表达式,以用户在文本框中编写的'@'开头(可以是richTextBox或某些Infragistics工具,并不重要,只需要工作)。

例如:

没有@expression nothingelse

@exression 必须是彩色的

我试图通过空格将字符串从文本框中拆分以识别单词,但我无法正确地替换它。现在我正在学习正则表达式并试图将它应用到我的问题中。

我在2017年的Visual Studio社区中使用C#。

修改

我从here更改了一些代码,试图让它适应我的问题。但限制器不能正常工作。我相信它正在发生,因为选择从'@'开始,但在此之前可能有一个空格,所以代码不起作用。

以下是我正在使用的代码:

parallel

2 个答案:

答案 0 :(得分:0)

你需要像这样使用正则表达式:

foreach (string result in Regex.Split(TextBox1, @" @\w+")) 
{
  //do stuff...
}

答案 1 :(得分:0)

我得到了我希望的结果,但是有一点问题。如果我用BackSpace擦除某些内容,背景颜色会开始突出显示所有内容。

我相信这是SelectionBackColor的一部分,因为当我使用SelectionColor时它不会发生。

代码:

 private void FindAt() //acha arrobas
    {
        for(int r = 0; r <= tam; r++)
        {
            for(int z = 0; z < (tam - r); z++)
            {
                if (z > 8) break;

                String temp = text.Substring(r, z);
                char aux = '\0';

                if (lista.FindStringExact(temp) != -1)
                {
                    if (tam > r + z) aux = text.ElementAt(r + z);
                    if ((r > 0 && text.ElementAt(r - 1) == '@') && aux == ' ')
                    {
                        atIndex[0, ctrlAt] = r-1;   //salva posição inicial da variavel, incluindo o @ (por isso o -1)
                        atIndex[1, ctrlAt] = z + 1;   //salva comprimento da variavel, + 1 por causa do @ (segundo argumento da substring)
                        ctrlAt++;
                    }
                }
            }
        }
    }

以及为子字符串着色的函数:

private void ColorAt() //colore variaveis
    {
        for (int a = 0; a < ctrlAt; a++)
        {
            if (atIndex[0, a] != -1)
            {
                richTextBox1.Select(atIndex[0, a], atIndex[1, a]);
                richTextBox1.SelectionBackColor = Color.Green;
            }
            else richTextBox1.SelectionBackColor = Color.Empty;
        }
    }