【发布时间】:2019-04-19 07:28:41
【问题描述】:
假设您有一个名为 FormBase 的表单,并且所有其他表单都继承自该表单。
比如我有public class Form formTest : FormBase
我现在在 formTest 的 ctor 中拥有什么:
public class Form formTest : FormBase
{
public formTest()
{
InitializeComponent();
Program.MainForm.AddToFormSizes(this, this.Size);
}
}
此代码将formTest 的实例添加到主窗体上的字典中,其size
这可行,但我想将此代码移动到FormBase,因此我不必将这行代码放在每个继承的形式中。
public class Form FormBase : Form
{
public FormBase()
{
InitializeComponent();
Program.MainForm.AddToFormSizes(this, this.Size);
}
}
现在,问题是当我这样做时,size 在设计时将具有FormBase 的大小,而不是formTest 的大小。
FormBase 中有没有办法捕获formTest 的大小或继承自FormBase 的任何其他形式?
供参考,这是MainForm中AddToFormSizes的代码
private Dictionary<Form, Size> _formSizes = new Dictionary<Form, Size>();
public void AddToFormSizes(Form form, Size size)
{
_formSizes.Add(form, form.Size);
}
【问题讨论】:
-
我认为您无能为力。
formTest的大小在formTest.InitializeComponent()中设置(更改),FormBase对此一无所知。在此之前,formTest.Size是从FormBase派生的大小。 -
移动这个东西(它编译吗?):
Program.MainForm.AddToFormSizes(this, this.Size);到protected override void OnHandleCreated(EventArgs e),在base.OnHandleCreated(e);之后。在您的base表单中。 -
@Jimi 好主意!这似乎确实有效。我的立场是正确的。
-
@Jimi 是的,可以编译。
MainForm只是Program.cs中的一个静态引用,用于访问我的主窗体。我会试试这个建议谢谢 -
顺便说一句,您不需要
MainForm在Program.cs中的静态引用。您只需将AddToFormSizes()设为静态即可。您可以从MainForm中的实例成员调用它。
标签: c# winforms visual-inheritance