我觉得有趣的是,你的派生形式不会自动继承它们的基本形式的大小,因为这应该工作,而无需你做任何事情。你的问题的
设想的原因:
我怀疑的事实,你使用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