RichTextBox の特定文字列の色を変更する
Visual C# の RichTextBox で、特定の文字列に色を付ける方法について整理してみます。
ここでのやり方としては、RichTextBox の Find メソッドで特定の文字列を順次探し、それが見つかったら、その部分の色を変更するという流れになります。
///
/// RichTextBox の任意のキーワードを色付けします。
///
///
色付けの対象となる RichTextBox コントロールです。
///
色付けを行うキーワードです。
///
色付けに使用するカラーです。
public static void Coloring(RichTextBox target, String keyword, Color color)
{
// found 変数では検索を行う文字位置の一つ手前を示します。最初は - 1 となります。
int found = -1;
// キーワードが見つからなくなるまで繰り返します。
do
{
// 対象の RichTextBox から、キーワードが見つかる位置を探します。検索開始位置は、前回見つかった場所の次からとします。
found = target.Find(keyword, found + 1, RichTextBoxFinds.MatchCase);
// キーワードが見つかった場合は、その色を変更します。
if (found >= 0)
{
target.SelectionStart = found;
target.SelectionLength = keyword.Length;
target.SelectionColor = color;
}
else
{
// キーワードが見つからなかった場合は、繰り返し処理を終了します。
break;
}
}
while (true);
}
例えばこのような感じにすることで、同じキーワードが RichTextBox.Text 内に複数現れた場合にも、繰り返し判定することで、それぞれについて色を設定することができます。
検索の際には、前回検索して見つかった位置(初回は -1)の次の位置から検索させることで、繰り返し処理を行うたびに、見つかった文字の次の位置(最初は先頭)から検索を行うようになっています。キーワードが見つからなかった場合は RichTextBox の Find メソッドは -1 を返すので、それによって色付けが全て終わったことを検知しています。