在运行时确定控件的AutoSize' -size

时间:2015-02-17 22:55:09

标签: c# .net vb.net winforms

我想在运行时(动态创建)中布局控件。出于这个问题的目的,让我们限制一个Button控件。我想设置控件的属性(例如Text),然后确定控件的最小大小以使其正确显示;设置AutoSize = true的大小。在C#示例代码中,GetAutoSizeSize是此最小大小:

Button button = new Button();
this.Controls.Add(button);

button.Text = "Example";
button.Size = GetAutoSizeSize(button);
button.Location = /* Some calculation based on button.Size */

可能的解决方案:AutoSize

可以设置button.AutoSize = truebutton.AutoSizeMode = AutoSizeNode.GrowAndShrink。之后,可以获取button.Size,之后可以关闭AutoSize并可以更改控件大小。

潜在问题:

  • 看起来很奇怪,我不禁觉得这很容易破坏,但也许我错了?

可能的解决方案:GetPreferredSize

button.GetPreferredSize可用于获取控件想要的大小。

问题:

  • 其用法是内部和/或用于流程布局。
  • GetPreferredSize将建议的大小作为参数,因此需要猜测哪些是合适的。
  • 返回的尺寸错误,因为它返回控件的'舒适'尺寸,可能远大于AutoSize给出的最小尺寸。

编辑:从评论和一些反复试验中,我得出结论,我最初使用AutoSize方法列出的问题是由于需要将控件添加到首先是控件集合,AutoSizeMode设置为GrowAndShrink

我想知道是否存在确定AutoSize-size的函数(和/或更多'健壮'方式):像GetPreferredSize这样的函数返回大小而不必实际切换{{1 }}

1 个答案:

答案 0 :(得分:-1)

当你在控件上绘图时,这是有效的。

String sMyString = "this is my string";
Font fntFont = new Font("Arial", 8);
SizeF sfMySize = new SizeF(5,5);
sfMySize = System.Graphics.MeasureString(sMyString, fntFont, sfMySize);

这将为您提供控件文本周围边界框的尺寸。您必须在文本周围设置适当的缓冲区来设置按钮大小。