Компонент / элемент пользовательского текстового поля (не элемент управления) - PullRequest
0 голосов
/ 12 марта 2012

Мне нужен класс, который имитирует элемент управления TextBox, но это не элемент управления, а вместо этого пользовательский нарисованный компонент или элемент.

Создание такого элемента похоже на повторное изобретение колеса, поскольку я вижу его везде,Например, в любом современном веб-браузере текстовые поля не являются элементами управления.Большинство элементов управления Winforms, особенно элементы управления ToolStrip, такие как ToolStripTextBox, имеют элементы, которые ведут себя как текстовые поля (но не являются элементами управления).

Я предполагаю, что Microsoft не изобретает колесо заново для каждого элемента управления, который они создают.Но, скорее всего, их код проприетарный, а не публичный.

Кто-нибудь знает о решении с открытым исходным кодом для этого?Я имею опыт работы с рисованием GDI +, но текстовое поле не является тривиальной задачей, когда вы рассматриваете позиционирование каретки, выделение и вставку текста.

Буду признателен за любые указания о том, как писать код самостоятельно, например:Как рассчитать символ в данной точке.Должен ли я создать таблицу соответствия для измеренной ширины каждого возможного символа?Или выполнить цикл по MeasureString, чтобы учесть пространство форматирования?

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Вы можете найти нужный код внутри этой статьи / проекта.http://www.codeproject.com/Articles/161871/Fast-Colored-TextBox-for-syntax-highlighting

0 голосов
/ 12 марта 2012

Почему это не должен быть контроль?Если вы используете Windows Forms, гораздо более вероятно, что вам действительно нужен элемент управления.

Распространенными случаями, когда может возникнуть такой тип вопроса, является редактирование сетки.Вместо неконтролируемого TextBox обычно происходит то, что сетка отображает простой текст в сетке, пока пользователь не сфокусируется на этой сетке.В этот момент для редактирования вставляется временный, настоящий TextBox.Если оставить эту ячейку, текстовое поле будет отброшено, а возможно измененный текст теперь будет отображаться в таблице.

Я полагаю, что ваша ситуация аналогична.Если нет, пожалуйста, объясните ваши цели.

...