2009-09-30 76 views
2

我想創建一系列UserControls,它們都從一個自定義的UserControl對象繼承。我想要實現的一個關鍵行爲是動態調整所有控件的大小以適應控件大小的能力。從繼承UserControl獲取初始尺寸

爲了做到這一點,我需要獲得控件的初始寬度和高度,以便將其與調整後的尺寸進行比較。在我的繼承控件中,我可以在InitializeComponent()調用之後將代碼放入構造函數中以獲取尺寸。有沒有什麼辦法可以從基礎對象代碼做到這一點?

此外,如果有更好的方法來做到這一點,我願意提供建議。

回答

2

我最終使用我的基本控件的尺寸作爲所有繼承控件的固定大小。通過覆蓋SetBoundsCore()方法,這相當容易:

public partial class BaseControl : UserControl 
{ 
    private int _defaultWidth; 
    private int _defaultHeight; 

    public BaseControl() 
    { 
     InitializeComponent(); 

     _defaultWidth = this.Width; 
     _defaultHeight = this.Height; 
    }   

    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) 
    { 
     if (this.DesignMode) 
     { 
      width = _defaultWidth; 
      height = _defaultHeight; 
     } 

     base.SetBoundsCore(x, y, width, height, specified); 
    } 
}  

任何控件都繼承BaseControl會自動默認爲其固定尺寸。

在運行時,我的調整大小代碼基於新的寬度和高度與_defaultWidth和_defaultHeight成員計算調整大小比率。

1

在用戶控件中,利用容器中每個控件的對接和錨定屬性。當用戶控件大小或調整大小時,內容應自動調整。然後在代碼中,您所需要做的就是設置用戶控件的大小。

+0

停靠不適用於我,因爲我需要保留控件的佈局。基本上我試圖完成的是類似於ComponentOne sizer。執行代碼並不困難,我只是在調整大小之前抓住原始尺寸的一種方式。 – polara 2009-09-30 15:48:16

+0

也許我還不夠清楚。您可以使用對接和/或錨定。如果你不需要停靠子控件,只需使用錨定(Anchor屬性)。 – 2009-09-30 16:07:17

+0

我試着將UserControl上的所有按鈕設置爲[Top,Left,Bottom,Right]。他們調整了大小但沒有移動,結果彼此重疊。 – polara 2009-09-30 18:29:39