在使用C#+ Winforms翻译应用程序的过程中,我需要根据语言更改按钮的文本。
我的问题如下:
假设我要翻译“大家好!”按钮。 “Bonjour tout le monde”!
你可以猜到,如果我输入英文文本或法文文本,按钮的大小就不一样......我的问题是“简单”,我怎样才能设法在运行中调整按钮大小以便文本适合它的内容在按钮中?
到目前为止,我有类似的东西!
[大家好!]
[的Bonjour]
答案 0 :(得分:26)
正如其他海报所说的那样,绝对不需要使用基础Graphics
对象。
如果您将按钮的AutoSize
属性设置为true,将AutoSizeMode
设置为GrowAndShrink
,将AutoEllipsis
设置为false,则会自动调整大小以适合文本。
话虽这么说,您可能需要进行多次布局调整,以使此更改适合您的UI。您可以调整按钮的填充以在文本周围添加空间,并且您可能希望将按钮放在TableLayoutPanel
(或其他内容)中以在调整大小时阻止它们重叠。
编辑:
@mastro指出:AutoEllipsis
仅在AutoSize
为false
时有效(如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}}为FlowLayoutPanel
或LeftToRight
时,它们之间的水平距离将始终保持不变。您可以通过适当设置按钮的RightToLeft
属性来调整此距离。您可以通过增加开始新组的按钮的左边距来创建按钮组。
如果您将按钮的Margin
属性设置为Dock
,它们甚至会自动增大宽度,以便在{{1} DockStyle.Fill
时适合最宽的按钮是} FlowDirection
或FlowLayoutPanel
。
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
属性设置为AutoSize
,AutoSizeMode
属性将仅允许按钮的大小增加;通过将GrowOnly
属性更改为AutoSizeMode
,该按钮现在将根据其GrowAndShrink
属性自动扩展或缩小宽度和高度。
另请注意,在设置如上所示的两个属性时,您可以在Text属性中使用新行(Text
或Environment.NewLine
),按钮将根据需要缩小。
答案 5 :(得分:0)
如其他答案中所建议的那样,除了将AutoSize
设置为true
并将AutoSizeMode
设置为GrowAndShrink
之外,您可能还需要设置{{1 }}属性,如果您已设置按钮图片,则文本不会与图片重叠。