Разрешить пользователям вставлять TAB в TextBox, но не переводить строки - PullRequest
2 голосов
/ 17 декабря 2008

Я хочу иметь TextBox, который принимает клавишу TAB (и помещает TAB, ASCII 0x09, \ t соответственно в текстовое поле) вместо перехода к следующему элементу управления. TextBox имеет свойство AcceptsTab, которое я установил в true, но это не дает желаемого результата. Оказывается, свойство AcceptsTab работает только тогда, когда Multiline также имеет значение true. Однако я хочу иметь TextBox с одной строкой, который не принимает переводы строк.

Ответы [ 2 ]

4 голосов
/ 17 декабря 2008

Вот что вы делаете. Создайте свой собственный класс, который наследуется от TextBox. В конструкторе установите для multiline значение true, а для AcceptsTab - значение true. Затем переопределите WndProc и используйте этот код:

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == (int)0x102 && m.WParam.ToInt32() == 13)
            {
                return;
            }

            base.WndProc(ref m);
        }

Это заблокирует ввод ключа и, следовательно, новая строка не будет создана. Hacky? да, но это сработает ..

РЕДАКТИРОВАТЬ: Я объясню, что делает этот код. Каждая форма и элемент управления Windows получают сообщение Windows, когда что-то происходит, например, рисование, нажатие клавиши и т. Д. И т.д. клавиша была нажата. Если это сообщение и WParam == 13, то это означает, что была нажата Enter, в этом случае return, ничего не делать. Иначе, возобновите как ожидалось. Имеет смысл?

0 голосов
/ 17 декабря 2008

Sel multilines в true и установите размер строки равным 1. Вы получите желаемый результат.

...