1

小さな道具を作っています。次のコードは、大きな RichTextBox が更新されたときに発生します。

このコードを変更して、 だけでなく で強調表示#703919するにはどうすればよいですか?Color.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 に答える