Обновление переменной при каждом вызове метода. Объясните тонкости инициализации переменных при объявлении
Есть RichTextBox, в который введен произвольный текст. При нажатии комбинации клавиш alt+Right хочу поочередно выделять каждое слово в тексте (последовательность символов от пробела до пробела). Добавил для этого KeyEventHandler, в котором прописал:
private void hotKeys(object sender, KeyEventArgs e) {
if (e.Alt && e.KeyCode == Keys.Right) {
if (richTextBox.Focused)
{
int pos = Regex.Match(richTextBox.Text, @"\s+").Index;
richTextBox.SelectionLength = pos;
}
}
}
Но комбинация клавиш работает некорректно: запоминает в pos длину первого слова в тесте и далее подставляет его везде. Как я понял данное регулярное выражение ищет в тексте любое количество пробелов начиная с текущей позиции курсора. (Для начала текста нужно указать ^), а значит переменная pos просто не обновляется.
- Почему
posне обновляла значение? - Нет ли в коде утечки памяти, ведь я создаю pos каждый раз при нажатии комбинации клавиш?
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Попробуйте так
int pos = 0;
private void hotKeys(object sender, KeyEventArgs e) {
if (e.Alt && e.KeyCode == Keys.Right) {
if (richTextBox.Focused)
{
pos += Regex.Match(richTextBox.Text.Substring(pos), @"\s+").Index;
richTextBox.SelectionLength = pos;
} else pos = 0;
}
}
Правильно будет устанавливать позицию когда текс бокс получит фокус