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

В форме C# у меня есть панель, привязал все стороны, и внутри, текстовое поле, привязанное главный/левый/правильный.

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

16
задан Masoud 11 January 2016 в 06:11
поделиться

4 ответа

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

    private void textBox1_TextChanged(object sender, EventArgs e) {
        Size sz = new Size(textBox1.ClientSize.Width, int.MaxValue);
        TextFormatFlags flags = TextFormatFlags.WordBreak;
        int padding = 3;
        int borders = textBox1.Height - textBox1.ClientSize.Height;
        sz = TextRenderer.MeasureText(textBox1.Text, textBox1.Font, sz, flags);
        int h = sz.Height + borders + padding;
        if (textBox1.Top + h > this.ClientSize.Height - 10) {
            h = this.ClientSize.Height - 10 - textBox1.Top;
        }
        textBox1.Height = h;
    }

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

25
ответ дан 30 November 2019 в 15:22
поделиться

Я бы предложил использовать Graphics.MeasureString .

Сначала вы создаете объект Graphics , затем вызываете для него MeasureString , передавая строку и шрифт текстового поля.

Пример

string text = "TestingTesting\nTestingTesting\nTestingTesting\nTestingTesting\n";

// Create the graphics object.
using (Graphics g = textBox.CreateGraphics()) {        
    // Set the control's size to the string's size.
    textBox.Size = g.MeasureString(text, textBox.Font).ToSize(); 
    textBox.Text = text;
}

Вы также можете ограничить его вертикальной осью, установив только свойство textBox.Size.Height и используя перегрузку MeasureString , которая также принимает int ширина .

Edit

Как указал SLaks, другой вариант - использовать TextRenderer.MeasureString . Таким образом, нет необходимости создавать объект Graphics .

textBox.Size = TextRenderer.MeasureString(text, textBox.Font).ToSize(); 

Здесь вы можете ограничиться изменением размера по вертикали с помощью техники Ханса, передав дополнительный параметр Size в MeasureString ​​с высотой int.MaxValue .

2
ответ дан 30 November 2019 в 15:22
поделиться

Можно использовать Label и установить AutoSize на true.

2
ответ дан 30 November 2019 в 15:22
поделиться

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

.
0
ответ дан 30 November 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: