我的问题如下:
假设我想将一个按钮从“Hi all!”翻译成“Bonjour tout le monde”!
显然,如果输入英文文本或法文文本,按钮的大小将不同...我的问题很“简单”,如何在运行时调整按钮的大小,以便文本适合按钮的内容?
到目前为止,我得到了以下代码!
[Hi all!]
[Bonjour]
完全没有必要像其他帖子所说的那样使用底层的Graphics
对象。
如果你将按钮的 AutoSize
属性设置为 true,AutoSizeMode
设置为 GrowAndShrink
,AutoEllipsis
设置为 false,它就会自动调整大小以适应文本。
尽管如此,你可能需要进行一些布局调整,才能使这个变化适应你的用户界面。你可以调整按钮的内边距以在文本周围添加空白,你可能还想将按钮放置在 TableLayoutPanel
(或类似的控件)中,以防止它们在调整大小时重叠。
编辑:
@mastro指出:AutoEllipsis
只在 AutoSize
为 false
时有效(如文档中所述),因此只要其他三个属性设置正确,它可以安全地忽略。
你最好的选择是按照ach的回答所描述的设置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";
}
this.button1.Width = (int)size.Width + button1.Padding.Left + button1.Padding.Right;
。如果您在文本的左侧或右侧有图像,则需要添加图像的宽度。 - Olivier Jacot-Descombes试试这个:
Button.AutoSize = true;
Button.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
Button.TextAlign = ContentAlignment.MiddleLeft;
Button.Padding = new Padding(0, 0, 0, 0);
要使WinForms中的按钮根据文本大小自动增长和/或缩小,您需要将按钮的 AutoSize
属性设置为 True
,并将 AutoSizeMode
属性设置为 GrowAndShrink
。
// C#
btn.AutoSize = true;
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink;
' VB.NET
btn.AutoSize = True
btn.AutoSizeMode = AutoSizeMode.GrowAndShrink
AutoSizeMode
属性设置为GrowOnly
时,AutoSize
属性才允许按钮的大小增长;将AutoSizeMode
属性更改为GrowAndShrink
后,按钮现在会根据其Text
属性自动延伸或缩小宽度和高度。Environment.NewLine
或vbCrLf
),按钮将根据需要进行缩放。如Andrew Hanlon所解释的,您可以设置AutoSize = true
。
这样做时,通过将它们放在FlowLayoutPanel
上,您还可以自动获得完美的按钮布局。
当FlowLayoutPanel
的FlowDirection
为LeftToRight
或RightToLeft
时,它们之间的水平距离将始终保持不变。您可以通过适当地设置按钮的Margin
属性来调整此距离。您可以通过增加开始新组的按钮的左边距来创建按钮组。
如果将按钮的Dock
属性设置为DockStyle.Fill
,则它们甚至会自动增加宽度以适应最宽的按钮,如果FlowLayoutPanel
的FlowDirection
为TopDown
或BottomUp
。
btn.AutoSizeMode = AutoSizeMode.GrowOnly;
btn.AutoSize = true;
btn.Dock = DockStyle.Fill;
AutoSize
设置为 true
,并将 AutoSizeMode
设置为 GrowAndShrink
之外,如果您设置了按钮图像,则还需要设置 TextImageRelation
属性,以使文本不会重叠在图像上。