2016-05-15 19 views
0

我有一個Windows窗體,其中我有一個選項卡控件,其中我有其他控件。調整窗體大小Control.Bounds.Bottom創建意想不到的結果

由於控制量是動態的,我想尺寸窗體恰到好處我有這樣一段代碼:

 int w = 0; 
     int h = 0; 
     foreach (Control x in Tab_Control.Controls) 
     { 
      if (x.Bounds.Right > w) w = x.Bounds.Right; 
      if (x.Bounds.Bottom > h) h = x.Bounds.Bottom; 
     } 
     Tab_Control.Size = new Size(w, h); 
     Form1.Size = new Size(w, h); 

雖然這種設置形式寬度正好其高度作物上的底部的兩個控制。我認爲這可能是因爲位置是相對於父控件的,但是當我使用「PointToScreen(Point.Empty)」來獲得一些真實的座標時,我發現差異是21像素,這並沒有多大幫助。

所以我想知道爲什麼設置窗體高度爲h結束太短。

回答

2

只需設置ClientSize屬性即可。

更好的是不寫任何代碼。將窗體的AutoSize屬性設置爲True,將AutoSizeMode設置爲GrowAndShrink。你肯定更喜歡在底部和右側的控件上設置保證金屬性,所以在控件和邊框之間有一個體面的空間。

+0

設置ClientSize工作,但將「AutSize」設置爲True,將「AutoSizeMode」設置爲「GrowAndShrink」會出於某種原因裁剪一些底部控件(有邊距)。 – mathgenius

+0

Nvm,它不起作用,因爲它中有一個Tab Control,它本身沒有AutoSize propery。 – mathgenius

3

這種差異是由於表單標題欄的大小造成的。

您正在正確計算控件所需的大小,但是您將窗口的總大小(包括標題欄)設置爲該高度。

您需要在標題欄的高度上添加您計算的尺寸。

你可以從CaptionHeight財產標題欄的高度System.Windows.Forms.SystemInformation

如果不能涵蓋所有的差異再看看錶格的邊框厚度,看是否需要考慮這一點以及

+0

謝謝,這有所幫助,但有一些種植發生。它仍然不足。 – mathgenius

+0

@mathgenius - 您可能還需要考慮邊框粗細。檢查SystemInformation類中的數字。 – ChrisF

+0

到目前爲止,添加CaptionHeight,BorderSize.Height和Border3DSize.Height沒有完全幫助。缺少20個像素。我查看了「SystemInformation」的所有成員,但沒有看到任何適用於我的案例的其他成員。 – mathgenius