C# 如何根据按钮的文本调整按钮的大小
在用C#+Winforms翻译应用程序的过程中,我需要根据语言更改按钮的文本 我的问题如下: 假设我想把一个按钮从“大家好!”翻译成“世界报你好” 你可以猜到,如果我输入英文文本或法文文本,按钮的大小将不一样。。。我的问题是“简单”,我如何能够动态调整按钮的大小,使文本适合按钮中的内容 到目前为止,我得到了这样的东西 [大家好!]C# 如何根据按钮的文本调整按钮的大小,c#,winforms,button,text,resize,C#,Winforms,Button,Text,Resize,在用C#+Winforms翻译应用程序的过程中,我需要根据语言更改按钮的文本 我的问题如下: 假设我想把一个按钮从“大家好!”翻译成“世界报你好” 你可以猜到,如果我输入英文文本或法文文本,按钮的大小将不一样。。。我的问题是“简单”,我如何能够动态调整按钮的大小,使文本适合按钮中的内容 到目前为止,我得到了这样的东西 [大家好!] [您好]您最好的选择是按所述设置属性 但是,如果AutoSize不适合您,那么在代码中调整按钮的大小就很容易了。您只需设置按钮的宽度即可。诀窍是使它足够大,以适合您的
[您好]您最好的选择是按所述设置属性 但是,如果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";
}
完全没有必要像其他海报所说的那样使用底层的
图形
对象
如果将按钮的AutoSize
属性设置为true,将AutoSizeMode
设置为growtandshrink
,将自动省略号设置为false,则它将自动调整大小以适应文本
也就是说,您可能需要进行一些布局调整,以使此更改适合您的UI。您可以调整按钮的填充以增加文本周围的空间,并且您可能希望将按钮放置在表格布局面板
(或其他)中,以防止它们在调整大小时重叠
编辑:
@马斯特罗指出:自动省略号
仅在自动大小
为false
时有效(如中所述),因此只要其他三个属性设置正确,就可以安全地忽略它。尝试以下方法:
Button.AutoSize = true;
Button.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
Button.TextAlign = ContentAlignment.MiddleLeft;
Button.Padding = new Padding(0, 0, 0, 0);
如前所述,您可以设置AutoSize=true
进行此操作时,您还可以通过将按钮放置在FlowLayoutPanel
上,自动获得完美的按钮布局
当FlowLayoutPanel
的流向为LeftToRight
或RightToLeft
时,它们之间的水平距离将始终保持不变。您可以通过适当设置按钮的边距
属性来调整此距离。通过增加开始新组的按钮的左边距,可以创建按钮组
如果将按钮的Dock
属性设置为DockStyle.Fill
,则如果FlowLayoutPanel
的FlowDirection
为TopDown
或BottomUp
时,按钮甚至会自动增加宽度以适合最宽的按钮
btn.AutoSizeMode = AutoSizeMode.GrowOnly;
btn.AutoSize = true;
btn.Dock = DockStyle.Fill;
要在WinForms中启用按钮,根据文本的大小进行增长和/或收缩,需要将按钮的AutoSize
属性设置为True
,将AutoSizeMode
属性设置为growtandshrink
// C#
btn.AutoSize = true;
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink;
' VB.NET
btn.AutoSize = True
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink
请注意,如果AutoSizeMode
属性设置为growtonly
,则AutoSizeMode
属性仅允许按钮的大小增大;通过将AutoSizeMode
属性更改为growthandshrink
,按钮现在将根据其文本
属性自动扩展或减小宽度和高度
还要注意,在如上所示设置两个属性时,可以使用新行(Environment.NewLine
或vbCrLf
)在文本属性中,按钮将根据需要缩小。除了将自动调整大小
设置为真
和自动调整大小
设置为增长和收缩
,如其他答案中所建议,如果已设置按钮图像,则可能还需要设置文本图像关系
属性,因此,文本不会与图像重叠。对于OP的需要,这可能是一个更好的解决方案,因为听起来他们正在处理一个相当简单的secnario。然而,“绝对没有必要”的说法具有误导性。MeasureString是程序员构建自定义表单和控件的最佳工具之一。web程序员(通过HTTP处理程序)也可以方便地根据可变文本创建精确大小的图像。@Tim-我不是说MeasureString有任何负面影响,它有它的用途,但这显然不是其中之一。用不必要的任意(宽度+=3)代码来填充代码是一种不好的做法。您不需要添加填充吗<代码>this.button1.Width=(int)size.Width+button1.Padding.Left+button1.Padding.Right代码>。如果文本的右侧或左侧有图像,则必须添加图像宽度。@OlivierJacot Descombes基于我也这么认为的结果,然后更改了我的答案。因为有一个更好的答案(Andrew的),任何使用这个答案的人都可以很容易地确定是否需要考虑尺寸中的填充,我将拒绝修改这个答案。