Richtextbox удаляет выделенный текст

У меня есть следующий код:

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.N)
        {
            richTextBox1.Select(1, 3);
        }
    }

Когда я нажимаю клавишу N, выделенный текст заменяется на «n». Я прочитал это Выбор текста в RichTexbox в С# удаляет текст , но это не имело никакого эффекта.

Я использую формы Windows.


person Sumi    schedule 23.11.2012    source источник


Ответы (2)


Попробуйте сами:
Откройте редактор, введите текст, отметьте часть этого текста и нажмите 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

Скорее всего, вам понадобится e.Handled = true; в этом, чтобы остановить событие.

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.handled.aspx

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
        if (e.KeyCode == Keys.N)
        {
            richTextBox1.Select(1, 3);
            e.Handled = true;
        }
}
person tjg184    schedule 23.11.2012