如何根据文本大小调整按钮的大小

时间:2010-10-19 06:00:37

标签: c# winforms button text resize

在使用C#+ Winforms翻译应用程序的过程中,我需要根据语言更改按钮的文本。

我的问题如下:

假设我要翻译“大家好!”按钮。 “Bonjour tout le monde”!

你可以猜到,如果我输入英文文本或法文文本,按钮的大小就不一样......我的问题是“简单”,我怎样才能设法在运行中调整按钮大小以便文本适合它的内容在按钮中?

到目前为止,我有类似的东西!

[大家好!]

[的Bonjour]

6 个答案:

答案 0 :(得分:26)

正如其他海报所说的那样,绝对不需要使用基础Graphics对象。

如果您将按钮的AutoSize属性设置为true,将AutoSizeMode设置为GrowAndShrink,将AutoEllipsis设置为false,则会自动调整大小以适合文本。

话虽这么说,您可能需要进行多次布局调整,以使此更改适合您的UI。您可以调整按钮的填充以在文本周围添加空间,并且您可能希望将按钮放在TableLayoutPanel(或其他内容)中以在调整大小时阻止它们重叠。

编辑: @mastro指出:AutoEllipsis仅在AutoSizefalse时有效(如the documentation中所述),因此只要其他三个属性可以安全地忽略它设置正确。

答案 1 :(得分:20)

您最好的选择是按照AutoSize

所述设置ach's 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 :(得分:8)

试试这个:

Button.AutoSize = true;
Button.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
Button.TextAlign = ContentAlignment.MiddleLeft;
Button.Padding = new Padding(0, 0, 0, 0);

答案 3 :(得分:1)

正如Andrew Hanlon所述,您可以设置AutoSize = true

这样做时,您还可以通过将按钮放在FlowLayoutPanel上自动完成按钮的完美布局。

FlowDirection的{​​{1}}为FlowLayoutPanelLeftToRight时,它们之间的水平距离将始终保持不变。您可以通过适当设置按钮的RightToLeft属性来调整此距离。您可以通过增加开始新组的按钮的左边距来创建按钮组。

如果您将按钮的Margin属性设置为Dock,它们甚至会自动增大宽度,以便在{{1} DockStyle.Fill时适合最宽的按钮是} FlowDirectionFlowLayoutPanel

TopDown

答案 4 :(得分:1)

要根据文本的大小启用WinForms中的Button增长和/或缩小,您需要将按钮的AutoSize属性设置为True,将AutoSizeMode属性设置为{ {1}}。

GrowAndShrink

请注意,如果// C# btn.AutoSize = true; btn.AutoSizeMode = AutoSizeMode.GrowAndShrink; ' VB.NET btn.AutoSize = True btn.AutoSizeMode = AutoSizeMode.GrowAndShrink 属性设置为AutoSizeAutoSizeMode属性将仅允许按钮的大小增加;通过将GrowOnly属性更改为AutoSizeMode,该按钮现在将根据其GrowAndShrink属性自动扩展或缩小宽度和高度。

另请注意,在设置如上所示的两个属性时,您可以在Text属性中使用新行(TextEnvironment.NewLine),按钮将根据需要缩小。

答案 5 :(得分:0)

如其他答案中所建议的那样,除了将AutoSize设置为true并将AutoSizeMode设置为GrowAndShrink之外,您可能还需要设置{{1 }}属性,如果您已设置按钮图片,则文本不会与图片重叠。