Обновление переменной при каждом вызове метода. Объясните тонкости инициализации переменных при объявлении

Есть 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 просто не обновляется.

  1. Почему pos не обновляла значение?
  2. Нет ли в коде утечки памяти, ведь я создаю 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;
        } 
    }

Правильно будет устанавливать позицию когда текс бокс получит фокус

→ Ссылка