c# – WinForms按钮:Autosize Maximumsize
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – WinForms按钮:Autosize Maximumsize,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2639字,纯文字阅读大概需要4分钟。
内容图文
我想将按钮添加到FlowLayoutPanel.按钮可能包含较长的文本,文字之间有空格.按钮是Autosize = true和AutoSizeMode = AutoSizeMode.GrowAndShrink.我还将MaximumSize属性设置为(maxwidth,0). maxwidth是面板的宽度.因此按钮不会变得太宽.
我看到的是,Button的宽度受MaximumSize属性的限制,但是当文本换行发生时,Button的高度不会自动调整到包装文本的高度.这个问题有解决方案吗?
我也尝试过手动调整按钮的大小,如下所示:
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.它有效,但有没有一种正确的方法来确定这个额外的大小?也许是2x Padding ?????
几个小时之后…
我来到这个版本似乎工作得很好.
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的情况下测试了它并且工作正常.对此有何评论?
解决方法:
有一种正确的方法,但它并不是非常微妙.从ButtonRenderer类源代码(绘制按钮文本的Winforms类)反向设计它,您必须使用TextRenderer类来测量文本.并且必须使用VisualStyleRenderer.GetBackgroundContentRectangle()方法来获取有效的绘图边界.请注意,它小于按钮的大小,因为边框和边距取决于所选的视觉样式.
非常重要的问题是将计算出的内容矩形映射回外部按钮大小,并处理未启用视觉样式的旧机器.示例代码似乎达到了正确的大小:
private static void SetButtonSize(Graphics gr, Button button) {
VisualStyleElement ButtonElement = VisualStyleElement.Button.PushButton.Normal;
var visualStyleRenderer = new VisualStyleRenderer(ButtonElement.ClassName, ButtonElement.Part, 0);
var bounds = visualStyleRenderer.GetBackgroundContentRectangle(gr, button.Bounds);
var margin = button.Height - bounds.Height;
var fmt = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
var prop = new Size(bounds.Width, 0);
var size = TextRenderer.MeasureText(button.Text, button.Font, prop, fmt);
button.ClientSize = new Size(button.ClientSize.Width, size.Height - margin);
}
protected override void onl oad(EventArgs e) {
using (var gr = this.CreateGraphics()) {
SetButtonSize(gr, this.button1);
}
base.OnLoad(e);
}
没有广泛测试角落情况,不能说我推荐这个.
内容总结
以上是互联网集市为您收集整理的c# – WinForms按钮:Autosize Maximumsize全部内容,希望文章能够帮你解决c# – WinForms按钮:Autosize Maximumsize所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。