Как изменить размер кнопки в зависимости от ее текста
В процессе перевода приложения с С# + Winforms мне нужно изменить текст кнопки в зависимости от языка.
Моя проблема заключается в следующем:
Скажем, я хочу перевести кнопку "Привет всем!". на "Bonjour tout le monde"!
Как вы можете догадаться, размер кнопки не будет одинаковым, если я ввешу английский текст или французский... Мой вопрос "прост", как я могу изменить размер кнопки "на лету", поэтому текст подходит его содержимое в кнопке?
До сих пор я получил что-то подобное!
[Привет всем!]
[Бонжур]
Ответы
Ответ 1
Лучше всего установить свойство AutoSize, как описано ach answer
Однако, если AutoSize не работает для вас, изменение размера кнопки в коде достаточно просто. Вам просто нужно установить ширину кнопки. Трюк делает его достаточно большим, чтобы соответствовать вашему тексту.
using(Graphics cg = this.CreateGraphics())
{
SizeF size = cg.MeasureString("Please excuse my dear aunt sally",this.button1.Font);
// size.Width+= 3; //add some padding .net v1.1 and 1.0 only
this.button1.Padding = 3;
this.button1.Width = (int)size.Width;
this.button1.Text = "Please excuse my dear aunt sally";
}
Ответ 2
Абсолютно не нужно использовать базовый объект Graphics
, как говорили другие плакаты.
Если для свойства кнопки AutoSize
установлено значение true, от AutoSizeMode
до GrowAndShrink
и AutoEllipsis
до значения false, оно будет автоматически изменяться в соответствии с текстом.
При этом вам может потребоваться внести несколько корректировок макета, чтобы это изменение соответствовало вашему пользовательскому интерфейсу. Вы можете настроить добавление кнопок, чтобы добавить пространство вокруг текста, и вы можете поместить свои кнопки в TableLayoutPanel
(или что-то еще), чтобы они не перекрывались при изменении размера.
Изменить:
@mastro отметил, что: AutoEllipsis
действует только тогда, когда AutoSize
false
(Как объясняется в документации), поэтому он может быть безопасно проигнорировано, если все три свойства установлены правильно.
Ответ 3
Попробуйте следующее:
Button.AutoSize = true;
Button.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
Button.TextAlign = ContentAlignment.MiddleLeft;
Button.Padding = new Padding(0, 0, 0, 0);
Ответ 4
Как Andrew Hanlon объясняет, вы можете установить AutoSize = true
.
При этом вы также можете автоматически создать идеальный макет кнопок, разместив их на FlowLayoutPanel
.
Горизонтальное расстояние между ними всегда будет оставаться неизменным, если FlowDirection
FlowLayoutPanel
равно LeftToRight
или RightToLeft
. Вы можете отрегулировать это расстояние, установив свойство Margin
кнопок соответствующим образом. Вы можете создавать группы кнопок, увеличивая левое поле кнопок, начинающих новую группу.
Если вы установите для свойства Dock
для кнопок DockStyle.Fill
, они будут даже автоматически увеличивать свою ширину, чтобы соответствовать самой широкой кнопке, если FlowDirection
FlowLayoutPanel
- TopDown
или BottomUp
.
btn.AutoSizeMode = AutoSizeMode.GrowOnly;
btn.AutoSize = true;
btn.Dock = DockStyle.Fill;