2013-07-22 61 views
0

我有這樣的代碼動態的WinForms控制大小的改變

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

用戶控件的0,0,0,0定義爲paddingmargin屬性,我堅持爲什麼發生這種情況。

+2

什麼是「Dock」和「Anchor」設置?你怎麼知道尺寸改變了? –

+0

用於用戶控制; 'Anchor'是'Top,Left','Dock'是'None'。 – Intrepid

+1

我在'panel1.Controls.Add(rect)'行上放了一個斷點,然後用F10對它進行了操作,使用VS調試器打開'Controls'集合以打開'base'對象,直到找到'大小「屬性,並看到它在那裏不同。 – Intrepid

回答

0

我在回答我自己的問題,因爲在將面板的控件集合添加到用戶控件後,我發現導致Size屬性發生了什麼變化。

更改用戶控制的的MS Sans Serif 8.25pt默認字體不同的字體,即Arial Regular 8.25pt在這種情況下,解決了我的問題,用戶控件添加到面板的控件集合後的尺寸沒有變化。

在Visual Studio 2012中必定存在導致此行爲發生的一些錯誤。

0

真正的問題是AutoScaleMode屬性。默認情況下,它被設置爲字體,這意味着如果窗體的字體大小與控件的字體大小不同,控件將被調整大小。

將AutoScaleMode設置爲None將解決此問題。 此外,確保窗體和控件具有相同的字體將解決此問題。