Как перехватить клавишу Tab в элементе управления редактирования - PullRequest
2 голосов
/ 04 февраля 2009

Мне нужно пользовательское поведение для клавиш табуляции в элементе управления RichTextEdit.

На данный момент лучшее, что у меня есть, это:

editBox.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.field_PreviewKeyPress);


  private void field_PreviewKeyPress(object sender, PreviewKeyDownEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Tab: 
                     //Some code here
                break;
            }
        }

Клавиша табуляции регистрируется нормально, но после этого элемент управления все равно обрабатывает клавишу и перемещает фокус на следующий элемент управления. Кажется, нет способа использовать это ключевое событие.

Ответы [ 3 ]

1 голос
/ 04 февраля 2009

Может быть, эта статья CodeProject может дать вам подсказку:

TabKeyIntercept - перехватывать и обрабатывать клавишу Tab в форме Windows. Forms

[...] К счастью, в базовом классе Form существует protected override bool ProcessTabKey(bool forward) метод. Используя этот метод, мы можем перехватить и «поглотить» клавишу Tab.

И, как оказалось, если ProcessTabKey() возвращаемое значение метода ложь, клавиша Tab делает это в метод OnKeyDown (). Но из Конечно, если ваш код "потребляет" Клавиша Tab в методе ProcessTabKey(), Вам, вероятно, не нужно будет обрабатывать это в методе OnKeyDown().

Также комбинация Control-Tab превращает его в метод OnKeyDown().

Итак, зная эти вещи, мы готовы определить индивидуальное использование для клавиши Tab - и мы можем закодировать форма, позволяющая пользователю использовать Комбинация Control-Tab для переключения между нормальным использованием / значением Клавиша Tab и наше пользовательское использование.

1 голос
/ 04 февраля 2009

Сам нашел решение - переопределить bool RichTextEdit.ProcessCmdKey (ref Message m, Keys keyData).

0 голосов
/ 04 февраля 2009

Вы говорите, что используете элемент управления "RichTextEdit", но я предполагаю, что вы имеете в виду RichTextBox. Если это так, вы сможете установить для свойства AcceptsTab значение True, чтобы оно могло обрабатывать клавишу табуляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...