mridul samadder Ответов: 4

как установить высоту текстового поля с изменением ширины


У меня есть текстовое поле с изменяющейся шириной в percent.so ширина не одинакова.
я хочу установить высоту текстового поля в соответствии с содержимым.как это сделать?

4 Ответов

Рейтинг:
30

Wonde Tadesse

Установите 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();
    }


Надеюсь, это вам очень поможет.


mridul samadder

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

Sergey Alexandrovich Kryukov

Вонде, я проголосовал 5 за ответ. Это не твоя вина, что ты не знал, чего хочет ОП.
Теперь я знаю-это была плохая идея.

Пожалуйста, посмотрите мое решение.
--СА

Wonde Tadesse

Спасибо, СА.

Рейтинг:
1

Ed Nutting

Для этого Вам нужно использовать JavaScript. Вам нужно обработать событие изменения размера окна, а затем соответствующим образом установить высоту текстового поля. Google поиска для: 'событий браузера JavaScript изменить размер" и " JavaScript textarea в набор высоты. Это очень простое решение - никто не собирается делать это за вас. :P так что не пытайтесь перепечатывать ;)

Надеюсь, это поможет,

Эд :)


Рейтинг:
1

Sergey Alexandrovich Kryukov

Если вы не хотите, чтобы появлялась полоса прокрутки, это означает, что вам не нужно TextBox.

Будьте логичны.

Если это текстовое поле, то оно будет отображаться следующим образом textarea элемент на стороне клиента. Он служит этой цели только в том случае, если вы позволяете пользователю вводить его; поэтому вызов пользователя всегда вводит достаточно текста, чтобы отобразить полосу прокрутки. Если вам нужно держать его только для чтения в любое время, это означает, что… тебе не нужно ... TextBox вообще, используйте вместо этого статический текст! Он может меняться на обратной стороне страницы, но между ними он будет статичным — без полос прокрутки.

—СА


Ed Nutting

Я думаю, что вы немного упустили суть. Пожалуйста, смотрите мой ответ :P OP хочет изменить размер текстового поля, чтобы остановить полосы прокрутки. Не знаю, почему он хочет это сделать - есть причина, по которой используются полосы прокрутки, но в любом случае... ОП хочет того, чего хочет ОП :Р

Sergey Alexandrovich Kryukov

Нет, я не скучал по нему. Вы отвечаете правильно. Моя точка зрения такова: запрос ОП не имеет смысла, измените дизайн. "ОП хочет того, чего хочет ОП" - пожалуйста, откуда ты это знаешь? Вы должны видеть разницу между тем, что хочет человек, и тем, что он думает, что он хочет.
Мы тоже не знаем, но этот случай выглядит очевидным...
--СА

Ed Nutting

Я знаю разницу, это было сказано саркастически, предполагая, что ОП понятия не имел, о чем они на самом деле просят. Я всегда забываю, что сарказм не работает через интернет-форумы/тексты и другие письменные формы общения :P

Sergey Alexandrovich Kryukov

Странно, мой детектор сарказма не выдал меня до сих пор даже в Интернете. Возможно вам нужно немного повернуть ручку аттенюатора вправо :-)
--СА

mridul samadder

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

Sergey Alexandrovich Kryukov

Извините, мне кажется, вам не хватает понимания. Думайте о том, что пользователи должны видеть, а не о том, что вы хотите. Спросите себя-зачем хранить текстовое поле в соответствии с содержимым? Вы на самом деле не улучшаете пользовательский опыт, следуя этой цели.
--СА

Ed Nutting

Спасибо, но, глядя на вашу примерную страницу, кажется, что SA может быть write или даже Dalek Dave. Эти поля не сделаны с текстовыми полями - или если они есть, то это неправильная вещь для использования. То, что вам нужно, - это элемент div или p, который содержит текст и делает его похожим на коробку. Это означало бы, что вам вообще не нужно использовать javascript :P

Sergey Alexandrovich Kryukov

Спасибо за понимание, Эд.
--СА

mridul samadder

! SAK почему я стараюсь держать высоту в соответствии с контентом, так это то, что зрители могут видеть все целиком content.so это не должно быть головной болью.смотрите пример модуля dnn - (ссылка удалена по какой-то причине).поэтому всегда старайтесь дать решение, не пытаясь узнать о нем слишком много подробностей.

Wonde Tadesse

Ответ обновлен.

mridul samadder

интересно, спасибо за УР обновление кодов.но там нет изменения размера способ появится для моего текстового поля! в коде позади файла, как вы написали - textBox1.Resize(); есть ли необходимость включать какую-либо сборку?

Wonde Tadesse

mridul samadder, Resize () - это метод расширения, который я создал.Как им пользоваться ? Создайте файл класса с именем ResizeExtension и скопируйте и пройдите код, который я предоставил в блоке кода ResizeExtension. Для получения дополнительной информации пожалуйста прочтите http://msdn.microsoft.com/en-us/library/bb383977.aspx

mridul samadder

но безрезультатно.у него есть некоторый расчет максимального количества символов в строке, который я не думаю правильным, потому что символы в строке варьируются в зависимости от переменной ширины

Sergey Alexandrovich Kryukov

Прислушайтесь к хорошему дружескому совету: сдавайтесь. Вы не получите идеального решения, как бы сильно вы ни старались. Либо сделайте статический текст, либо сделайте его редактируемым, но оставьте какой-то разумный размер; нет ничего плохого в прокрутке, если это textarea.

Рейтинг:
1

Dalek Dave

В качестве альтернативы используйте div, который будет меняться в зависимости от содержимого.