Рейтинг:
1
BillWoodruff
Я согласен с замечаниями ОГА, что лучше использовать полосы прокрутки; однако я не могу утверждать, что понимаю вашу цель здесь. Если вы действительно хотите изменить размер текстового поля во время набора текста, вот вам подсказка:
С WinForm текстовое поле с 'перенос слов и многострочное значение 'true, 'текстовое поле textbox1'
private int fontht, baseheight;
private void Form1_Load(object sender, EventArgs e)
{
fontht = textBox1.Font.Height;
baseheight = textBox1.Height;
}
private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
int numLines = textBox1.GetLineFromCharIndex(textBox1.TextLength);
if (numLines == 0)
{
if (textBox1.Height != baseheight)
{
textBox1.Height = baseheight;
}
return;
}
int newht = baseheight + (fontht * numLines);
if (newht == textBox1.Height) return;
textBox1.Height = newht;
}
Вы можете улучшить это, приняв во внимание заполнение свойств TextBox и разницу между textBox1.Height и textBox1.ClientSize.Высота, которая даст вам ширину границы в действительности. Альтернативный метод будет использовать " MeasureString.
Рейтинг:
0
OriginalGriff
Простое решение: не делайте этого.
Текстовые поля не "предназначены" для того, чтобы расти, чтобы соответствовать контенту: под этим я подразумеваю, что пользователи этого не ожидают, и все неожиданное сбивает их с толку. И что вы ожидаете, когда коробка выйдет за пределы формы? Что же тогда должен видеть пользователь? Как он может увидеть, что он набрал, или найти, как вернуться к началу, или даже увидеть кнопки для отправки данных или отмены?
Сделайте так, чтобы ваши текстовые поля регулировались по размеру, чтобы они помещались в форму или другой контейнер, да, но все остальное - это много усилий, не дающих хорошего результата с точки зрения удобства использования: именно для этого существуют полосы прокрутки. И если вы сделаете свое приложение более сложным в использовании, они не будут его использовать!
dolfijn3000
дело в том, что в настоящее время scrolbar затрудняет его использование, потому что текстовое поле не растет. из-за того, что он не вырос, вид текста очень мал.
OriginalGriff
Вам придется повторить это еще раз: размер текстового поля не имеет ничего общего с размером текста внутри, если только вы не изменяете размер шрифта в зависимости от объема содержимого. Что было бы действительно глупо, так как это сделало бы текст нечитаемым очень быстро...
Вы делаете коробку достаточно большой, чтобы прочитать средний объем текста, который она будет содержать: книга получит целую страницу за один раз, адрес четыре или пять строк, имя от 20 до 50 символов. Вы не заставляете поле начинаться с 20 символов и разворачиваться на страницу (или наоборот) - это просто не очень хороший дизайн пользовательского интерфейса.
dolfijn3000
Я не знаю, насколько большим будет текст. пользователь может написать все, что он хочет внутри него. они могут написать в нем одну строчку или целую историю.
OriginalGriff
Затем вы делаете его достаточно большим, чтобы вместить "некоторый текст" и "вписаться" в остальную часть пользовательского интерфейса. Расширение текстового поля, чтобы оно соответствовало тексту, который вводит пользователь, не имеет никакого смысла, когда вы пытаетесь его использовать, потому что оно либо заполняет весь экран (а рабочий стол не прокручивается), либо мешает другим элементам управления, которые им могут понадобиться.
Подумайте об этом: если у вас даже слово открыто в окне, оно не становится больше, когда вы достигаете конца строки или страницы, не так ли? :смеяться:
dolfijn3000
хорошо, я попробую это сделать. а также то, что он заполнит весь экран, - это не проблема. панель, на которой находятся текстовое поле, кнопки и т. д., прокручивается.
https://imgur.com/a/gDorPXl