Попробуйте сами:
Откройте редактор, введите текст, отметьте часть этого текста и нажмите N
. Что случается? Выделенный текст заменяется на n
.
То же самое происходит и в вашем RichTextBox
. Здесь важно понимать, что с настроенным вами событием вы только добавляете некоторые функции и оставляете нетронутой обработку событий по умолчанию (обрабатываемую ОС).
Итак, с вашим кодом при нажатии клавиши вы просто делаете
richTextBox1.Select(1, 3);
который выбирает некоторые символы, а затем срабатывает обработка событий по умолчанию. Таким образом, есть некоторый отмеченный текст, который заменяется на N
.
Итак, вам просто нужно пометить событие как обработанное вами. Не используя Handled
-свойство, а SuppressKeyPress
-свойство.
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.N)
{
richTextBox1.Select(1, 3);
e.SuppressKeyPress = true;
}
}
В документации Handled
четко указано:
If you set Handled to true on a TextBox, that control will
not pass the key press events to the underlying Win32 text
box control, but it will still display the characters that the user typed.
Вот официальная документация SuppressKeyPress
.
person
KeyNone
schedule
23.11.2012