2

我有一個名稱空間Company.UI.Forms,我們的表單基類BaseFormSystem.Windows.Forms.Form繼承。在設計時限制用戶控件的大小

我需要限制此表單的大小,以便如果具體表單(例如ExampleForm)源自BaseForm,它應該在VS設計器視圖中具有固定大小。固定大小應該以某種方式設置或定義(在BaseForm ctor?中),以便派生的ExampleForm和設計師選取它。

這可能嗎?

[編輯]目的是將基類用作已知屏幕尺寸的Windows CE設備的全屏窗體的模板,爲此我希望能夠在設計器中佈置子控件。

+1

它是在運行時可調整大小還是固定大小呢? – Pondidum 2009-06-24 12:51:00

+0

固定。目的是將基類用作全屏幕窗體的模板,用於已知屏幕尺寸的Windows CE設備,爲此我希望能夠在設計器中佈置子控件。 – 2009-06-25 07:44:28

+0

我的第二個答案不適合你嗎? – jmservera 2009-06-25 09:36:35

回答

1

我不相信這種情況會有任何直接的支持。所有控制窗體上最大大小的值都可以被子窗體覆蓋。因此,無法從財產角度限制它。

我能想到的唯一方法是重寫大小更改方法,並將大小重置爲最大大小,如果它超過。雖然這可能會有一些不好的影響,但在您作爲解決方案解決之前,您應該先使用它。

2

在標準的WinForms中,您可以重寫SetBoundsCore方法。此代碼將防止基類在設計時改變它......但請記住它可以通過任何繼承類反正被重寫:

protected override void SetBoundsCore(int x, int y, 
    int width, int height, BoundsSpecified specified) 
{ 
    if (this.DesignMode) 
    base.SetBoundsCore(x, y, 500, 490, specified); 
    else 
    base.SetBoundsCore(x, y, width, height, specified); 
} 

我已經把是否因爲您指定要在設計時,如果您不希望在運行時調整大小,請將其刪除。

2

好了,現在的CF,快速的解決方案,您可以通過在存儲領域的大小做一個乾淨的代碼...

public BaseForm() 
{ 
InitializeComponent(); 
this.Size=new Size(20,20); 
} 


bool resizing; 

protected override void OnResize(EventArgs e) 
{ 
if(!resizing) 
{ 
    resizing = true; 
    try 
    { 
    this.Size = new Size(20, 20); 
    } 
    finally 
    { 
    resizing = false; 
    } 
} 
else 
    base.OnResize(e); 
} 
0

假設我們有一個按鈕,它的名字是「Button1的」在用戶控件。 我想要,而在設計時更改usercontrol的大小,button1的大小與usercontrol的大小相同。

此解決方案的工作屬性。

在用戶控件的Resize事件中寫這個。

private void ButtonDesigned_Resize(object sender, EventArgs e) 
    {    
     button1.Size = new Size(this.Size.Width - 2, this.Size.Height - 2); 

     // Note : this.size hint to usercontrol size 

     or 

     button1.Size = this.Size 
    } 

我的英語不是good.i圈這個解決方案是夠你用的。