我觉得有趣的是,您的派生表单不会自动从其基本表单继承大小,因为这应该可以在您不必做任何事情的情况下工作。
您的问题的怀疑原因:
我怀疑您的问题是由于您使用 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 { ... }
...
另一种选择(如果一切都失败了,最后的手段):
作为最后的手段,您可以简单地忘记表单设计器,而只需在代码编辑器中手动定义派生表单(尽管我个人不想这样做):
public class DerivedForm : BaseForm
{
public DerivedForm()
{
// make all necessary changes to the base form:
...
}
}