C # Изменение размера текстового поля в соответствии с содержимым
Я пишу программу, в которой пользователь должен иметь возможность писать текст в TextBox . Я бы хотел TextBox изменить свой размер, чтобы он соответствовал содержимому. Я пробовал следующее:
Я получаю сообщение об ошибке Graphics не работает для TextChangedEventArgs . Есть ли другой способ изменить размер TextBox ?
вы пробуете это в серебряном свете? — Mustafa Ekici
10 ответы
Вы должны попробовать код, подобный приведенному ниже. У меня это сработало.
Для получения дополнительной информации см. TextRenderer.MeasureText ()
ответ дан 13 окт ’15, 18:10

У меня есть usercontrol, внутри которого есть TextBox. Когда текст сильно увеличивается, увеличивается только ширина, даже если ширина превышает его родительский. Как определить ширину родителя, затем обернуть текст и увеличить высоту? — Мейсам Толуие
Я добавляю этот ответ, так как не вижу fixed width аспект текстового поля, обсуждаемого в любом другом. Если у вас есть фиксированная ширина текстового поля и вы хотите настроить только его высоту, вы можете сделать что-то вроде следующего:
Что-то вроде этого дает высоту текста, как он нарисован в самом многострочном текстовом поле с переносом слов:
Я не уверен, что StringFormat должно быть, но значения StringFormatFlags не похоже на значение по умолчанию TextBox составить.
Теперь с MessageSize.Height вы знаете высоту текста в текстовом поле.

У меня была такая же проблема, и я решил ее более простым способом.
Я использовал свойство AutoSize элемента управления Label. Я добавил невидимую метку к своей форме, установив для его свойства AutoSize значение True. Когда мне нужно изменить размер текстового поля, я использую этот код:
Я установил максимальный и минимальный размер этикетки для лучшего результата. Повеселись
ответ дан 01 мая ’17, 04:05
Бац! Получил, что он работает с TextBox, закрепленным на панели, и Label, у которого свой MaximumSize, устанавливает изменение размера контейнера TextBox. ТАКЖЕ я установил MyLabel.Text = MyTextBox.Text + «»; Таким образом, когда вы нажимаете клавишу «Enter», размер метки изменяется (размер метки не изменяется без символа после CRLF). Спасибо! — Джон Курц
Ваша привязка к неправильному событию, и вы не можете использовать графический объект в TextChangedEventArgs объект.
Попробуйте использовать событие TextChanged. Следующий фрагмент работает:
Вам нужно будет использовать метод CreateGraphics () формы, чтобы создать экземпляр Graphics для измерения строки.
Компания TextChangedEventArgs класс не имеет Graphics свойство, которое является собственностью PaintEventArgs класс передан в Paint обработчик события

По сути, вы создаете свой собственный Graphics объект для формы, затем измерьте его на основе текста и шрифта TextBox. В using правильно утилизирует Graphics объект — ваш предыдущий код ужасно просочился бы!
Какой бы ни была цель.
Если размер текстового поля должен быть динамически настроен на основе строки, которая должна быть текстом внутри этого поля, нет хорошего варианта.
Причины: MeasureString использует обычные средства форматирования строк в качестве разделителей для собственной ширины и высоты. Также анализируются средства, возврат каретки и перевод строки. В результате получаем sizeF.Width и sizeF.Height.
В зависимости от строки (и ее шрифта и количества строк) эти обе переменные могут нести значения, которые иногда бесполезны для использования в качестве значений ширины / высоты текстового поля (потому что они могут быть больше, чем значения родительской формы, и это приведет к изменению размера текстового поля до размера, с левой и нижней границами за пределами родительской формы).
Некоторые решения все еще доступны, в зависимости от цели, которую вы хотите достичь.
Одна из идей: создать текстовое поле в дизайнере размером 100 X 100. включить перенос слов.
В разделе Онтекстчанжед обработчик событий текстового поля, мы просто изменяем размер текстового поля до значения, определенного нами (например, parentform.Width или другое жесткое значение).
Это приведет к тому, что перенос слов будет пересчитывать строку в текстовом поле. и это переставит все символы внутри текстового поля, потому что перенос слов включен.
Высота текстового поля может быть жестко задана в родительской форме, например, высота.
НО, лучше: установить высоту динамически, на основе значения Y ReturnValue (Point) метода texbox.GetPositionFromCharIndex (textbox.TextLength -1). Затем с Math.Min () определите, что меньше (parentform.Height или Point.Y), и сбросьте размер текстового поля на новый размер (previousDeterminedWidth, nowDeterminedHeight).
Имейте в виду (если полосы прокрутки включены), чтобы добавить около 17 пикселей к расчету ширины.
How to change the size of a textbox in C#
I admit, the title sounds almost trivial. But on the second sight, it is not so easy to change the size of a TextBox control in C#, because a TextBox does not have the AutoSize property. For other controls you can set the AutoSize property to false and then change the height (height-property). For the TextBox control this is unfortunately not the case.
Nevertheless you can set the height of a TextBox by using a small workaround. The trick is as follows:
First you have to set the multiline property to true. Then you can adjust, according to your mood, the minimum-size and the size property to change the size of the TextBox. When you’re done, you set the Multiline property back to false. The TextBox maintains the set size just yet. It’s that simple
Who still wonders, why you should need that, if the TextBox adapts itself to its size, should set the border style to “None” and change the font size. Namely, one would like to display a TextBox without frame and with a slightly larger font. In this case it must be said that the automatic resizing does not work correctly. This can be well seen in the following screen shot:
On the form there are four text boxes:
1: Font size and border style unchanged
2: Increased font size, border style unchanged
3: Increased font size, border style = “none”
4: Increased font size, border style = “none”, the size of the text box manually changed
As you can see in TextBox 3, the auto-size function does not work correctly with deactivated border and certain characters are not displayed correctly.
For this problem the above show workaround can help, as you can see by the fourth TextBox.
Как увеличить textbox c
![]()
Лучший отвечающий
Вопрос
Помогите, пожалуйста, с настройками элемента управления TextBox в Visual Studio C# (ранее эту же задачу решал в BuilderC ++, там это было можно легко сделать).
Нужно настроить TextBox таким образом, чтобы его высота Size. Height была 25, но при этом размер шрифта (т.е. высота букв) не совпадал с высотой элемента управления TextBox. При этом свойство BorderStyle должно быть установлено в None.
Проблема в том, что когда я пытаюсь установить свойство Size. Height , свойство не устанавливается. Его можно косвенно установить, если редактировать свойство Font . Size . Но в этом случае высота шрифта становиться слишком большой. Если же оставить значение FixedSingle , то цвет границы должен быть не черный, а белый чтобы был эффект когда BorderStyle установлено в None. Но свойства для изменения цвета границы не нашел.
Кроме того, нужно, чтобы внутри элемента был небольшой отступ между левой границей и текстом (а свойство Margin позволяет устанавливать такие отступы между самими элементами управления).
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Растянуть элементы на форме Windows Forms
В статье рассмотрим способ создания «резинового» интерфейса в формах Windows Forms и разберёмся, как растянуть элементы на форме при изменении размера окна программы.
Создадим в Visual Studio проект Windows Forms и разместим на форме следующие элементы управления:
- Label
- TextBox
- RichTextBox
- Button

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

Видим, что окно формы увеличилось в размере, но элементы управления никак не реагируют на данные изменения.
Теперь покажем, как создать адаптивный к изменениям размера окна интерфейс на форме Windows Forms.
Как растянуть элементы на форме Windows Forms
Для создания «резинового» интерфейса нужно воспользоваться свойствами элементов управления из категории Макет (Layout). А конкретно свойством Anchor.
В Windows Forms свойство Anchor определяет стороны контейнера (Top, Bottom, Left, Right) к которым привязывается элемент управления. При изменении размера контейнера расстояние между указанной стороной контейнера и ближайшей к ней стороне элемента управления остаётся неизменным.
Таким образом можно добиться растягивания и перемещения элементов в форме при изменении её размера.
В нашем случае контейнером для элементов управления является всё окно.
Зададим для TextBox значение атрибута Anchor = Top, Left, Right. Теперь расстояние между соответствующими сторонами ТекстБокса и окна будет неизменным. Так мы добьёмся изменения ширины контрола при изменении ширины окна.

Для RichTextBox значение свойства Anchor сделаем равным Top, Bottom, Left, Right.

У кнопки Button установим Anchor, как Top, Right.
Теперь запустим программу и изменим размер окна: увидим, что элементы управления на форме растягиваются и меняют своё местоположение. Теперь интерфейс стал адаптированным к изменению размера окна.

Есть ещё один момент. Когда мы будем уменьшать мышью размер формы — контролы будут скрываться из поля зрения.

Чтобы решить данную проблему, необходимо указать минимальный размер формы Windows Form в пикселях. Тем самым форму будет невозможно сделать меньше установленного размера.
Щёлкнем по форме и в окне свойств изменим параметр MinimunSize. Установим его равным текущему размеру формы в визуальном редакторе (Size).

Минимальный размер можно указать и меньшим — таким, при котором интерфейс хорошо выглядит и сохраняет свою функциональность. Нужные значения определяются экспериментально — для этого самостоятельно изменяйте размер формы.