我想在运行时(动态创建)中布局控件。出于这个问题的目的,让我们限制一个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 */
可以设置button.AutoSize = true
和button.AutoSizeMode = AutoSizeNode.GrowAndShrink
。之后,可以获取button.Size
,之后可以关闭AutoSize
并可以更改控件大小。
潜在问题:
button.GetPreferredSize
可用于获取控件想要的大小。
问题:
GetPreferredSize
将建议的大小作为参数,因此需要猜测哪些是合适的。AutoSize
给出的最小尺寸。 编辑:从评论和一些反复试验中,我得出结论,我最初使用AutoSize方法列出的问题是由于需要将控件添加到首先是控件集合,AutoSizeMode
设置为GrowAndShrink
。
我想知道是否存在确定AutoSize-size的函数(和/或更多'健壮'方式):像GetPreferredSize
这样的函数返回大小而不必实际切换{{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);
这将为您提供控件文本周围边界框的尺寸。您必须在文本周围设置适当的缓冲区来设置按钮大小。