1

我正在制作一个小工具。下面的代码在大型 RichTextBox 更新时触发。

我如何修改此代码以突出显示#703919Color.ForestGreen而不仅仅是#

我想保持代码尽可能简洁。

CSSGM

private void CSS_TextChanged(object sender, EventArgs e)
{
    CSS.Select(0, CSS.TextLength);
    CSS.SelectionColor = CSS.ForeColor;

    string[] Keywords = {"background", "filter", ":", "#"};
    Color[] Colours = {Color.DarkBlue, Color.DarkBlue, Color.Magenta, Color.ForestGreen};

    for(int i = 0; i < Keywords.Length; i++)
    {
        int Pointer = 0;
        int Index = 0;
        while(true)
        {
            Index = CSS.Text.IndexOf(Keywords[i], Pointer);
            if(Index == -1)
                break;
            CSS.Select(Index, Keywords[i].Length);
            CSS.SelectionColor = Colours[i];
            Pointer = Index + Keywords[i].Length;
        }
    }
}
4

1 回答 1

2

这取决于你想变得多灵活。

一个简单的解决方案是不从关键字中获取突出显示区域的长度,而是从其他来源获取:

var highlightLengthOverrides = new Dictionary<string, int> { { "#", 7 } };

int highlightLength;
if(!highlightLengthOverrides.TryGetValue(Keywords[i], out highlightLength))
    highlightLength = Keywords[i].Length;
CSS.Select(Index, highlightLength);
CSS.SelectionColor = Colours[i];
Pointer = Index + highlightLength;

请注意,这确实是一个非常简单的实现。只有在井号后面总是正好有 6 位数字时,它才有效。

其他选择是:

  • 编写或使用成熟的分词器
  • 使用正则表达式作为关键字。
于 2013-01-25T09:36:53.020 回答