私はC#アプリケーションでScintillaコントロールのラッパーであるScintillaNetを使用しています。私は最後にすべての単語を動的に追加しています:(今からこのキーワードを呼び出してみましょう)。私は、正規表現を使用して、ユーザーがコロンキーを押すたびに空白で区切られたキーワード列を使用しています。C#コロンで終わる単語を強調表示します。
if (e.Ch == ':')
{
string wp = string.Empty;
Regex r = new Regex(@"\b\w+[:\b]");
MatchCollection m = r.Matches(Scintilla.Text);
for (int i = 0; i < m.Count; i++)
{
wp += " " + m[i].Value.Substring(0, m[i].Value.Length - 1); // Remove the colon
}
wp = wp.ToLower();
Scintilla.Lexing.Keywords[3] = wp;
}
今の問題は、新しいキーワードが入力されるたびにあり、ユーザーがちょうどキーワードを強調するのではなく、コロンを押すと、それが不必要にひとつひとつをハイライト表示されます:ここでは(CharAddedイベントで)私のコードですキーワードを再度文書に追加します。だから私のコーディングはうまくいきますが、それはかなり悪いコーディングです。最後に入力したキーワードだけを強調表示するだけで、コードをもっと速くすることができますか?どんな助けやアイデアもありがとうございます。
これは質問に答えませんが、文字クラスの中から '\ b'を削除する必要があります。第1に、この文脈では「単語境界」を意味するものではなく、次の文字が英数字でない限り、「\ b」はコロンの後ろに一致しません。 '\ b \ w +:'を使うだけです。 –