2012-03-12 3 views
0

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

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

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

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

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

ответ

0

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

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

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

+0

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

+0

Возможно ли использовать WPF? Вы можете включить его как небольшую часть общего приложения, а не заменять то, что у вас есть. –

+0

Нет, к сожалению, я должен интегрировать это с проектом Winforms. –