Как изменить размер кнопки в зависимости от ее текста - PullRequest
16 голосов
/ 19 октября 2010

В процессе перевода приложения с помощью C # + Winforms мне нужно изменить текст кнопки в зависимости от языка.

Моя проблема заключается в следующем:

Допустим, я хочу перевести кнопку с "Привет всем!" в "Bonjour Tout Le Monde"!

Как вы можете догадаться, размер кнопки не будет одинаковым, если я введу текст на английском или французском языке ... У меня вопрос "простой", как мне изменить размер кнопки на лету, чтобы текст соответствовал его содержание в кнопке?

Пока что у меня есть что-то подобное!

[Привет всем!]

[Bonjour]

Ответы [ 5 ]

26 голосов
/ 19 октября 2010

Абсолютно нет необходимости использовать базовый объект Graphics, как говорили другие авторы.

Если вы установите для свойства AutoSize кнопки значение true, то AutoSizeMode - GrowAndShrink, иAutoEllipsis в false, он автоматически изменит размер в соответствии с текстом.

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

Редактировать: @mastro указализ того, что: AutoEllipsis допустимо только в том случае, если AutoSize равно false (как объяснено в документации ), поэтому его можно безопасно игнорировать, если другие три свойства установлены правильно.

21 голосов
/ 19 октября 2010

Лучше всего установить свойство Авторазмер , как описано ач ответ

Однако, если 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";
   }
8 голосов
/ 27 апреля 2015

Попробуйте это:

Button.AutoSize = true;
Button.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
Button.TextAlign = ContentAlignment.MiddleLeft;
Button.Padding = new Padding(0, 0, 0, 0);
1 голос
/ 19 февраля 2018

Чтобы включить или уменьшить или уменьшить размер кнопки в WinForms в зависимости от размера текста, необходимо установить для свойства AutoSize кнопки значение True и для свойства AutoSizeMode значение GrowAndShrink.

// C#
btn.AutoSize = true;
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink;

' VB.NET
btn.AutoSize = True
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink

Обратите внимание, что свойство AutoSize позволяет увеличивать размер кнопки только в том случае, если для свойства AutoSizeMode установлено значение GrowOnly; изменив свойство AutoSizeMode на GrowAndShrink, кнопка теперь будет автоматически расширяться или уменьшаться по ширине и высоте в зависимости от свойства Text.

Также обратите внимание, что при установке двух свойств, как показано выше, вы можете использовать новые строки (Environment.NewLine или vbCrLf) в свойстве Text, и кнопка будет уменьшаться по мере необходимости.

1 голос
/ 10 августа 2016

Как объясняет Эндрю Хэнлон , вы можете установить 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;
...