2009-06-26 4 views
0

Я пытаюсь сделать свой собственный контроль для .NET с помощью VB, и у меня возникают проблемы с достижением того, что я хочу сделать. На самом деле, я делаю элемент управления, который наследуется от класса текстового поля, и единственная модификация, которую я пытаюсь донести до него, заключается в том, что если элемент управления явно заполнен, пользователь больше не может вводить его. Таким образом:Проверка наличия многострочного текстового поля

  • Полоса прокрутки никогда не должна появляться.
  • Расширенный текстовый блок может быть многострочным или однострочным.
  • Расширение TextBox может иметь разные шрифты и размеры шрифтов.

Прямо сейчас, техника, которую я использую, - это graphics.measurestring, чтобы получить размерF, содержащий ширину и высоту моей строки, чтобы сравнить ее с высотой и шириной моего элемента управления текстовыми полями. Все это в событии KeyDown (я не знаю, что это лучшее решение). Я могу заставить его работать отлично для ширины, но я не могу показать высоту прямо в многострочном текстовом поле. Если кто-либо когда-либо работал с этим материалом, мне нужно было бы объяснить, как это сделать. Спасибо.

ответ

0

Проблема ваша третья требование:

The extended TextBox may have different fonts and font sizes. 

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

И если вы намерены поддерживать верхние и нижние индексы ...