Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据按钮的文本调整按钮的大小_C#_Winforms_Button_Text_Resize - Fatal编程技术网

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

C# 如何根据按钮的文本调整按钮的大小,c#,winforms,button,text,resize,C#,Winforms,Button,Text,Resize,在用C#+Winforms翻译应用程序的过程中,我需要根据语言更改按钮的文本 我的问题如下: 假设我想把一个按钮从“大家好!”翻译成“世界报你好” 你可以猜到,如果我输入英文文本或法文文本,按钮的大小将不一样。。。我的问题是“简单”,我如何能够动态调整按钮的大小,使文本适合按钮中的内容 到目前为止,我得到了这样的东西 [大家好!] [您好]您最好的选择是按所述设置属性 但是,如果AutoSize不适合您,那么在代码中调整按钮的大小就很容易了。您只需设置按钮的宽度即可。诀窍是使它足够大,以适合您的

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

我的问题如下:

假设我想把一个按钮从“大家好!”翻译成“世界报你好”

你可以猜到,如果我输入英文文本或法文文本,按钮的大小将不一样。。。我的问题是“简单”,我如何能够动态调整按钮的大小,使文本适合按钮中的内容

到目前为止,我得到了这样的东西

[大家好!]


[您好]

您最好的选择是按所述设置属性

但是,如果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的),任何使用这个答案的人都可以很容易地确定是否需要考虑尺寸中的填充,我将拒绝修改这个答案。