Я использую ScintillaNet, оболочку для элемента управления Scintilla в моем приложении C #. Я динамически добавляю все слова, оканчивающиеся на: (давайте просто назовем сейчас это ключевое слово). Я сделал это с помощью регулярного выражения строки ключевых слов, разделенных пробелами, каждый раз, когда пользователь нажимает клавишу с двоеточием. Вот мой код (в событии CharAdded):
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;
}
Теперь проблема в том, что каждый раз, когда вводится новое ключевое слово, и пользователь нажимает на двоеточие, вместо простого выделения ключевого слова, оно будет излишне выделять каждое ключевое слово в документе снова. Поэтому, хотя мое кодирование работает, это довольно плохое кодирование, и мне интересно, как я могу сделать свой код быстрее, только выделив последнее введенное ключевое слово. Любая помощь и / или идеи будут оценены.