我覺得有趣的是,你的派生形式不會自動繼承它們的基本形式的大小,因爲這應該工作,而無需你做任何事情。你的問題的
設想的原因:
我懷疑的事實,你使用Visual Studio的窗體設計器來編輯表格你的問題的結果。無論何時編輯表單,Windows窗體設計器都會在表單的InitializeComponent
方法中生成所需的代碼。所有生成的代碼都是賦值表單,它們設置表單的大小,即使它與基本表單的大小相同。因此,如果希望派生表單具有與基本表單相同的大小,即使在創建派生表單後更改基本表單的大小,也可能必須手動註釋這些分配。 (不過,我不知道這是否會導致與控制定位&布點更多的問題。)
// Code to be commented out in your derived form's InitializeComponent method:
this.AutoScaleDimensions = new System.Drawing.SizeF(...);
this.ClientSize = new System.Drawing.Size(...);
一旦這些行註釋掉,大小爲您的基本形式的InitializeComponent
將被用來設置爲派生形式。
一種解決方案:
您可以執行以下操作,使您不必設計器生成的代碼,你編輯的形式每次都手動註釋掉:
創建來自你的基本形式的表格;我們稱之爲FrozenBaseForm
。您將從該類中派生所有其他形式,而不是直接從基本形式派生。現在,在這個「中間」類,定義一個新的屬性ClientSize
:
public class FrozenBaseForm : BaseForm
{
new public SizeF ClientSize
{
get { return base.ClientSize; }
set { }
}
}
這將導致所有分配到ClientSize
有完全沒有影響,因此維持從基本形式的大小。這聽起來像是說實話,但它似乎工作。您可能必須以同樣的方式隱藏Size
屬性。
至於說,從FrozenBaseForm
,而不是直接從BaseForm
派生形式:
public class DerivedForm1 : FrozenBaseForm { ... }
public class DerivedForm2 : FrozenBaseForm { ... }
...
另一種選擇(如果一切都失敗了最後一招):
作爲最後的手段,你可以簡單地忘了Forms Designer,並在代碼編輯器中手動定義派生表單(儘管我個人不希望這樣做):
public class DerivedForm : BaseForm
{
public DerivedForm()
{
// make all necessary changes to the base form:
...
}
}
我認爲* [使用Visual C#.NET繼承Windows窗體](http://www.akadia.com/services/dotnet_inherited_forms.html)*非常接近您的要求。這是真的還是不是? –
@peter不好意見,但是我問了我的問題已經四年了。我現在沒有做太多的C#,但我相信你的鏈接對於發生這個問題的任何其他人都是非常有幫助的。 – dandan78