2012年10月7日日曜日

RichTextBox の特定文字列の色を変更する

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 を返すので、それによって色付けが全て終わったことを検知しています。



0 件のコメント:

コメントを投稿