как установить высоту текстового поля с изменением ширины
У меня есть текстовое поле с изменяющейся шириной в percent.so ширина не одинакова.
я хочу установить высоту текстового поля в соответствии с содержимым.как это сделать?
Установите TextMode
собственность компании TextBox
к MultiLine
и отрегулируйте width
и height
соответственно.
Надеюсь, это вам очень поможет.
[ОТРЕДАКТИРОВАННЫЙ]
Хорошо. Я дал вам прототип, который поможет вам закончить самостоятельно.Но есть определенные факторы, которые вы должны учитывать. Такие как
1.Тип font size
, font family
.., используемый в textbox
.
2.Это underlined
?
3.При расчете width
или height
, старайтесь не нарушать слово, и еще много факторов.
Прототип.
/// <summary> /// TextBox Resizer extension class /// </summary> public static class ResizeExtension { /// <summary> /// Resize TextBox according to input value /// </summary> /// <param name="textBox">TextBox instance</param> /// <param name="resizeFactor">ResizeFactor value</param> /// <param name="maxCharacterPerLine">Max Character Per line</param> public static void Resize(this TextBox textBox, int resizeFactor = 8, int maxCharacterPerLine = 20) { string textValue = textBox.Text; if (string.IsNullOrEmpty(textValue)) return; // Note: It is not completed, It just a prototype // --------------------------------------------- int width = textValue.Length * resizeFactor; // Calculate width int calculateHeight = textValue.Length % maxCharacterPerLine; // CalculateHeight should be incremental value int height = Convert.ToInt32(textBox.Height.Value) * (calculateHeight > 0 ? calculateHeight : 1);// Assuming that the default height > 0 // --------------------------------------------- // Note: It is not completed, It just a prototype textBox.Width = Unit.Pixel(width); // Done textBox.Height = Unit.Pixel(height); // Done } }
TextBox
пример.Например, если ваша веб-форма содержит textbox1
экземпляр затем вызовите Resize
метод.protected override void OnInit(EventArgs e) { base.OnInit(e); textBox1.Resize(); }
Вы не поняли, что я имел в виду, уже настроившись на многострочность.высота не будет фиксированной, она будет расти в соответствии с содержанием.если я установлю высоту в соответствии с линиями(разделив с \n в коде за файлом) в текстовом поле, то если есть строки, которые пользователи набрали без нажатия клавиши enter, то для этих строк появится полоса прокрутки.
Вонде, я проголосовал 5 за ответ. Это не твоя вина, что ты не знал, чего хочет ОП.
Теперь я знаю-это была плохая идея.
Пожалуйста, посмотрите мое решение.
--СА
Спасибо, СА.
Для этого Вам нужно использовать JavaScript. Вам нужно обработать событие изменения размера окна, а затем соответствующим образом установить высоту текстового поля. Google поиска для: 'событий браузера JavaScript изменить размер" и " JavaScript textarea в набор высоты. Это очень простое решение - никто не собирается делать это за вас. :P так что не пытайтесь перепечатывать ;)
Надеюсь, это поможет,
Эд :)
Если вы не хотите, чтобы появлялась полоса прокрутки, это означает, что вам не нужно TextBox
.
Будьте логичны.
Если это текстовое поле, то оно будет отображаться следующим образом textarea
элемент на стороне клиента. Он служит этой цели только в том случае, если вы позволяете пользователю вводить его; поэтому вызов пользователя всегда вводит достаточно текста, чтобы отобразить полосу прокрутки. Если вам нужно держать его только для чтения в любое время, это означает, что… тебе не нужно ... TextBox
вообще, используйте вместо этого статический текст! Он может меняться на обратной стороне страницы, но между ними он будет статичным — без полос прокрутки.
Я думаю, что вы немного упустили суть. Пожалуйста, смотрите мой ответ :P OP хочет изменить размер текстового поля, чтобы остановить полосы прокрутки. Не знаю, почему он хочет это сделать - есть причина, по которой используются полосы прокрутки, но в любом случае... ОП хочет того, чего хочет ОП :Р
Нет, я не скучал по нему. Вы отвечаете правильно. Моя точка зрения такова: запрос ОП не имеет смысла, измените дизайн. "ОП хочет того, чего хочет ОП" - пожалуйста, откуда ты это знаешь? Вы должны видеть разницу между тем, что хочет человек, и тем, что он думает, что он хочет.
Мы тоже не знаем, но этот случай выглядит очевидным...
--СА
Я знаю разницу, это было сказано саркастически, предполагая, что ОП понятия не имел, о чем они на самом деле просят. Я всегда забываю, что сарказм не работает через интернет-форумы/тексты и другие письменные формы общения :P
Странно, мой детектор сарказма не выдал меня до сих пор даже в Интернете. Возможно вам нужно немного повернуть ручку аттенюатора вправо :-)
--СА
@EdMan хорошее понимание
имейте в виду, что это модуль dnn, поэтому я размещаю его на многих страницах, а ширина текстового поля варьируется в contentpane.поэтому я использовал процент, чтобы соответствовать ширине текстового поля(так что символы в одной строке также различаются).что я хочу, так это сделать высоту моего текстового поля в соответствии с содержимым
Извините, мне кажется, вам не хватает понимания. Думайте о том, что пользователи должны видеть, а не о том, что вы хотите. Спросите себя-зачем хранить текстовое поле в соответствии с содержимым? Вы на самом деле не улучшаете пользовательский опыт, следуя этой цели.
--СА
Спасибо, но, глядя на вашу примерную страницу, кажется, что SA может быть write или даже Dalek Dave. Эти поля не сделаны с текстовыми полями - или если они есть, то это неправильная вещь для использования. То, что вам нужно, - это элемент div или p, который содержит текст и делает его похожим на коробку. Это означало бы, что вам вообще не нужно использовать javascript :P
Спасибо за понимание, Эд.
--СА
! SAK почему я стараюсь держать высоту в соответствии с контентом, так это то, что зрители могут видеть все целиком content.so это не должно быть головной болью.смотрите пример модуля dnn - (ссылка удалена по какой-то причине).поэтому всегда старайтесь дать решение, не пытаясь узнать о нем слишком много подробностей.
Ответ обновлен.
интересно, спасибо за УР обновление кодов.но там нет изменения размера способ появится для моего текстового поля! в коде позади файла, как вы написали - textBox1.Resize(); есть ли необходимость включать какую-либо сборку?
mridul samadder, Resize () - это метод расширения, который я создал.Как им пользоваться ? Создайте файл класса с именем ResizeExtension и скопируйте и пройдите код, который я предоставил в блоке кода ResizeExtension. Для получения дополнительной информации пожалуйста прочтите http://msdn.microsoft.com/en-us/library/bb383977.aspx
но безрезультатно.у него есть некоторый расчет максимального количества символов в строке, который я не думаю правильным, потому что символы в строке варьируются в зависимости от переменной ширины
Прислушайтесь к хорошему дружескому совету: сдавайтесь. Вы не получите идеального решения, как бы сильно вы ни старались. Либо сделайте статический текст, либо сделайте его редактируемым, но оставьте какой-то разумный размер; нет ничего плохого в прокрутке, если это textarea.
В качестве альтернативы используйте div, который будет меняться в зависимости от содержимого.