动态Winforms控制更改大小

动态Winforms控制更改大小,winforms,user-controls,Winforms,User Controls,我有这个密码 ShadedRoundedRectangle rect = new ShadedRoundedRectangle(); rect.Location = new Point( 0, nextY ); rect.Size = new Size( 200, 20 ); rect.NewText = String.Format( "{0} x {1} ({2} kcals)", ci.Amount, ci.Product.ItemName, ci.Amount * ci.Product.C

我有这个密码

ShadedRoundedRectangle rect = new ShadedRoundedRectangle();
rect.Location = new Point( 0, nextY );
rect.Size = new Size( 200, 20 );
rect.NewText = String.Format( "{0} x {1} ({2} kcals)", ci.Amount, ci.Product.ItemName, ci.Amount * ci.Product.Calories );

panel1.Controls.Add( rect );
ShadedRoundedRectangle
是一个用户控件,可以绘制大小为
200,20
的着色圆形矩形。将
rect
添加到面板控件集合时,大小将更改为
233、23


用户控件为
padding
margin
属性定义了
0,0,0
,我无法解释为什么会发生这种情况。

在将用户控件添加到面板控件集合后,我回答了我自己的问题,因为我已经找到了导致
Size
属性更改的原因

将用户控件的默认字体
MS Sans Serif 8.25pt
更改为其他字体,即本例中的
Arial Regular 8.25pt
解决了我的问题,并且在将用户控件添加到面板的控件集合后大小没有改变


Visual Studio 2012中一定存在导致此行为发生的错误。

真正的问题是AutoScaleMode属性。默认情况下,它设置为字体,这意味着如果表单的字体大小与控件的字体大小不同,则控件的大小将调整

将AutoScaleMode设置为None将解决此问题。
另外,确保表单和控件具有相同的字体将解决此问题。

什么是
Dock
Anchor
设置?您如何知道大小已更改?对于用户控件<代码>锚定是顶部,左侧和
停靠
。我在
面板1上放置了一个断点。控件。添加(rect)
行,然后用F10跨过它,使用VS调试器打开
控件
集合以打开
基本
对象,直到我找到
大小
属性并发现它与此不同。在分配
新文本
属性时,您是否有一些大小调整?例如,如果指定的字符串太长,则调整控件的大小?如果
NewText
不合适,则会用省略号修剪字符串的末端。这不会导致控件调整大小,因为
200,20
的初始矩形足以容纳文本。