programmist_derevo
@programmist_derevo

Как заблокировать переход на новую строку по нажатию Enter в RichTextBox(multiline)?

Всем привет! Такая проблема: на форме есть элемент RichTextBox, который служит полем ввода сообщений. По нажатию Enter он отправляет текст строкой sting куда надо. Но помимо запрограммированного мной действия выполняется еще дефолтное - переход на новую строку. Мне нужно, чтобы выполнялось только 1 действие (отправка сообщения), а не переход на новую строку.
При этом если юзер жмет shift+enter - переход на новую строку происходит.

Так вот как мне заблокировать дефолтную функцию Enter'a? Уже долго ищу ответ не могу найти, вроде бы такое простое действие.
  • Вопрос задан
  • 817 просмотров
Пригласить эксперта
Ответы на вопрос 2
@nightwolf_du
5 лет опыта. c#, js, sql.
Единственный способ, который приходит мне на ум, является сильно не простым.
Определите, на какой/какие из эвентов (KeyPress, KeyDown, KeyUp, PreviewKeyDown) приходится данное действие, после чего

1) снимите все дефолтные обработчики рефлекшеном,
2) обрабатывайте их вручную.

Снять обработчик можно например таким кодом (пример для события Click, соответственно для ваших строковая контанта EventClick поменяется, нужно поле отвечающее за ваши эвенты )
вместо panel1 - соответственно ваш richTextBox:
FieldInfo f1 = typeof(Control).GetField("EventClick", BindingFlags.Static| BindingFlags.NonPublic);
object obj = f1.GetValue(panel1);
PropertyInfo pi = panel1.GetType().GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);
EventHandlerList list = (EventHandlerList)pi.GetValue(panel1, null);
list.RemoveHandler(obj, list[obj]);


чтобы не писать после этого вручную всю обработку нажатия клавиш - можно попробовать поискать в EventHandlerList list нужный вам event handler, обрабатывающий пробел, но это довольно сложно, и не факт что вся логика связанная с нажатием клавиш - помещена не в один метод.
Чтобы разобраться лучше - смотрите исходники richTextBox
Ответ написан
@Sumor
Соответствующий ответ на StackOverflow

Предлагается установить AcceptsTabs в true и, по необходимости, дополнительно обрабатывать событие IsInputKey. При этом должен быть установлен AcceptButton у формы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы