2008/12/28(Sun) 03:48:03 編集(投稿者)
■No30622 (ただいま落ちこぼれ中 さん) に返信
>すみません、書き忘れましたキーダウンはフォームのキーダウンを使用しております。
やっぱり
>入力した文字を判定して一致していたら表示している文字の色を変化させる
これを最初の質問に書いてほしかったな
「Hello」って入力されたら、赤文字に変換する。
TextChangeイベントを使ってます。
サンプルは、キーワードが全角文字だと駄目って課題が残ってるけど。
public partial class Form1 : Form
{
private bool isChange_ = false;
public Form1()
{
InitializeComponent();
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
if (isChange_ == false)
{
isChange_ = true;
keywordHighlighting(ref richTextBox1, "Hello");
}
isChange_ = false;
}
// 共通関数 :キーワードハイライティング
public void keywordHighlighting(ref RichTextBox richTextBox, string keyWord)
{
int index = 0;
int ctbl = 0;
string rtfRead = null;
index = richTextBox.SelectionStart;
// RTF形式のテキストを取得
rtfRead = richTextBox.Rtf;
// 文字修飾クリア
rtfRead = rtfRead.Replace("\\cf1\\b ", "");
rtfRead = rtfRead.Replace("\\\\b0\\cf0 ", "");
//カラーテーブルを追加
ctbl = rtfRead.IndexOf("\\viewkind");
if (ctbl != 0)
{
rtfRead = rtfRead.Substring(0, ctbl - 1) + "{\\colortbl ;\\red255\\green0\\blue0;}\n" + rtfRead.Substring(ctbl);
}
//Replace メソッドで文字列の置換
string rtf = null;
string replaceWith = null;
string pattern = null;
Regex reg = null;
pattern = "(" + keyWord + ")";
replaceWith = "\\cf1\\b $1\\b0\\cf0 ";
reg = new Regex(pattern, RegexOptions.IgnoreCase);
rtf = reg.Replace(rtfRead, replaceWith);
richTextBox.Rtf = rtf;
richTextBox.SelectionStart = index;
}
}