Ответы пользователя по тегу Windows Forms
  • Как заблокировать переход на новую строку по нажатию Enter в RichTextBox(multiline)?

    @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
    Ответ написан
    2 комментария