Изменить высоту текстового поля? - PullRequest
44 голосов
/ 02 мая 2011

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

Ничего из нижеперечисленного не работает:

this.TextBox1.Size = new System.Drawing.Size(173, 100);

или

this.TextBox1.Size.Height = 100;

Я хотел иметь возможность изменять высоту однострочного текстового поля, чтобы он соответствовал размеру шрифта, без использования многострочного, если это возможно.

Ответы [ 21 ]

0 голосов
/ 14 апреля 2019

Таким образом, после того, как у меня возникла та же проблема с невозможностью отрегулировать высоту в текстовом поле, регулировка ширины - это хорошо, но высота никогда не корректировалась с вышеупомянутыми предложениями (по крайней мере, для меня), я наконец смог сделать это. Как упоминалось выше, проблема, по-видимому, связана с настройкой размера шрифта по умолчанию в моем текстовом поле и поведением автоматического изменения размера текстового поля вокруг него. Размер шрифта по умолчанию был крошечный. Следовательно, почему попытка форсировать высоту или даже отключить авторазмер не смогла решить проблему для меня.

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

    $textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(60,300)
$textBox.Size = New-Object System.Drawing.Size(600,80)
$textBox.Font = New-Object System.Drawing.Font("Times New Roman",18,[System.Drawing.FontStyle]::Regular)
$textBox.Form.Font = $textbox.Font

Обратите внимание, что значение высоты в '$ textBox.Size = New-Object System.Drawing.Size (600, 80 )' игнорируется, и размер шрифта фактически контролирует высоту текста. автоматическое изменение размера шрифта.

0 голосов
/ 09 апреля 2019

вы также можете изменить, вы также можете изменить MinimumSize

0 голосов
/ 02 февраля 2018

Самый простой способ сделать это

1 .. щелкните правой кнопкой мыши на текстовом поле

2 .. перейти к собственности

set Multiline = True

теперь сделано, оно автоматически изменит размер TextBox

и Вы также можете настроить, что

0 голосов
/ 29 марта 2017

Это то, что мне понравилось, так как все, что я хотел сделать, это установить высоту текстового поля.Свойство доступно только для чтения, а свойство находится в классе Unit, поэтому его нельзя просто установить.Поэтому я только что создал новый юнит, и конструктор позволяет мне установить высоту, а затем вместо этого установить текстовое поле на этот юнит.

Unit height = txtTextBox.Height;
double oldHeight = height.Value;
double newHeight = height.Value + 20; //Added 20 pixels
Unit newHeightUnit = new Unit(newHeight);
txtTextBox.Height = newHeightUnit;
0 голосов
/ 21 марта 2017

Шаги:

  1. Установить для текстовых полей многострочный
  2. Изменить высоту
  3. Изменить размер шрифта. (так что вписывается в большие текстовые поля)
  4. Установить текстовые поля обратно на не многострочный
0 голосов
/ 01 декабря 2016

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

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

Это проблема, с которой я столкнулся при размещении текстовых полей рядом с полями со списком в форме. Это немного раздражает, потому что кому нужны два элемента управления рядом с разными высотами? Или разные шрифты для увеличения высоты? Microsoft, это должно быть просто!

Я использую .net framework 4 в VS2012, и следующее было самым простым решением для меня.

В событии загрузки формы (или в любом месте, которое длится после InitializeComponent): textbox.AutoSize = false Затем установите высоту на то, что вы хотите. Я хотел, чтобы мои текстовые поля и поля со списком имели одинаковую высоту, поэтому textbox.height = combobox.height помог мне.

Примечания:

1) На конструктор это не повлияет, поэтому вам потребуется запустить проект, чтобы увидеть конечный результат, поэтому возможны некоторые проб и ошибок.

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

0 голосов
/ 26 декабря 2015

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

Вы можете сделать его еще более естественным, используя следующие методы

    private void textBox1_Enter(object sender, EventArgs e)
    {

        panelTextBox.BorderStyle = BorderStyle.FixedSingle;
    }

    private void textBox1_Leave(object sender, EventArgs e)
    {
        panelTextBox.BorderStyle = BorderStyle.None;
    }
0 голосов
/ 02 февраля 2015

Следующий код, добавленный в ваш конструктор после вызова InitializeComponent (), позволит программно установить текстовое поле на правильную высоту без а) изменения свойства Multiline, б) необходимости жесткого кодирования высоты или в) перебора сгенерированный дизайнером код. Он по-прежнему не обязательно такой же чистый или приятный, как в пользовательском элементе управления, но он довольно простой и надежный:

if (txtbox.BorderStyle == BorderStyle.None)
{
    txtbox.BorderStyle = BorderStyle.FixedSingle;
    var heightWithBorder = txtbox.ClientRectangle.Height;
    txtbox.BorderStyle = BorderStyle.None;
    txtbox.AutoSize = false;
    txtbox.Height = heightWithBorder;
}

Я решил сделать его чище и проще в использовании, поместив его в статический класс и сделав его методом расширения в TextBox:

public static class TextBoxExtensions
{
    public static void CorrectHeight(this TextBox txtbox)
    {
        if (txtbox.BorderStyle == BorderStyle.None)
        {
            txtbox.BorderStyle = BorderStyle.FixedSingle;
            var heightWithBorder = txtbox.ClientRectangle.Height;
            txtbox.BorderStyle = BorderStyle.None;
            txtbox.AutoSize = false;
            txtbox.Height = heightWithBorder;
        }
    }
}
0 голосов
/ 22 января 2015

Я знаю, что это своего рода старая публикация, но я обнаружил, что попал в ту же проблему, и, немного исследовав, я обнаружил, что высота текстового поля WinForms фактически рассчитывается в зависимости от размера содержащегося в нем шрифта,это просто не совсем равно.

Этот парень объясняет, как выполняется вычисление, и как вы можете установить его в своем TextBox, чтобы получить желаемую высоту.

Ура!

0 голосов
/ 02 мая 2011

Я думаю, что это должно работать.

TextBox1.Height = 100;
...