using (Graphics cg = this.CreateGraphics()) {
SizeF size = cg.MeasureString(button.Text, button.Font, 200);
button.Width = (int)size.Width+20;
button.Height = (int)size.Height+20;
button.Text = someLongTextWithSpaces;
}
但请注意,我在计算的大小上增加了20。虽然这样可以工作,但有没有确定这个额外大小的正确方法?也许是2倍填充 + ?????
几个小时后...
我想到了这个版本,它似乎运行得相当好。
using (Graphics cg = this.CreateGraphics()) {
var fmt = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
var prop = new Size(tableLayoutPanel1.Width - 20, 0);
var size = TextRenderer.MeasureText(button.Text, button.Font, prop, fmt);
int border = button.Height - button.Font.Height;
button.Width = (int)size.Width + border;
button.Height = (int)size.Height + border;
button.Text = someLongTextWithSpaces;
}
看起来初始按钮高度是边框加上字体高度。因此,我计算了边框减去button.Height-button.font.Height。
根据Hans的建议,我现在使用TextRenderer.MeasureText。我测试了一下没有启用VisualStyles,它也可以正常工作。对此有什么评论吗?
FlowLayoutPanel1.ClientRectangle.Width
(或您称呼的面板名称)而不是手动添加maxwidth
数字。例如,在Form_Resize
中放置代码:Button1.MaximumSize = new Size(FlowLayoutPanel1.ClientRectangle.Width, 0)
(这是vb代码,请将其转换为c#)。我认为这是c#代码:Button1.MaximumSize == new Size(FlowLayoutPanel1.ClientRectangle.Width, 0);
- nelek