Какой бы ни была цель.
Если размер текстового поля должен динамически устанавливаться на основе строки, которая должна быть текстом внутри этого поля, , то нет удобной опции .
Причины: MeasureString использует обычные формататоры строк в качестве разделителей для своей собственной ширины и высоты.
Значения, возврат каретки и перевод строки тоже анализируются. В результате чего размер F.Width и sizeF.Height.
В зависимости от строки (и ее шрифта, и количества строк) обе эти переменные могут нести значения, которые иногда бесполезны для использования в качестве значений ширины / высоты текстового поля (поскольку они могут быть больше, чем родительская форма значения, и это приведет к изменению размера текстового поля до размера с левой и нижней границами за пределами границ родительской формы ).
Некоторые решения по-прежнему доступны, в зависимости от цели, которую хотелось бы достичь.
Одна идея была бы:
Создайте текстовое поле в конструкторе, размер = 100 X 100. включить перенос слов .
В обработчике события OnTextChanged текстового поля мы просто изменяем ширину текстового поля до значения, определенного самим собой (например, parentform.Width или другого жесткого значения).
Это заставит перенос слов пересчитать строку в текстовом поле и переставит все символы внутри текстового поля, потому что перенос слов включен.
Для высоты текстового поля может быть установлено значение parentform.Height, например.
НО,
лучше: установить высоту динамически, основываясь на значении Y ReturnValue (Point) метода texbox.GetPositionFromCharIndex (textbox.TextLength -1).
Затем с помощью Math.Min () определите, что меньше (parentform.Height или Point.Y), и установите для размера текстового поля новый размер (previousDeterminedWidth, nowDeterminedHeight).
Пожалуйста, имейте в виду (если полосы прокрутки включены), чтобы добавить около 17 пикселей в расчет ширины.
С наилучшими пожеланиями