C# Winforms Inhered控件阻止设计器工作

C# Winforms Inhered控件阻止设计器工作,c#,winforms,C#,Winforms,我有两个表单从下面的类继承控件: public class AInbox: Form { public FlowLayoutPanel InboxItems; } 这些表单继承如下内容: public partial class Inbox : AInbox { ... } 在Designer.cs文件中,我注释掉了原始的“InboxItems”控件声明,所有内容都可以正常编译和运行。。。除了GUI设计器。当我打开设计器时,会出现错误“变量'InboxItems'未声明或从未分配。”

我有两个表单从下面的类继承控件:

public class AInbox: Form
{
    public FlowLayoutPanel InboxItems;
}
这些表单继承如下内容:

public partial class Inbox : AInbox
{
...
}
在Designer.cs文件中,我注释掉了原始的“InboxItems”控件声明,所有内容都可以正常编译和运行。。。除了GUI设计器。当我打开设计器时,会出现错误“变量'InboxItems'未声明或从未分配。”


是否有任何方法可以使用此继承并仍让设计器工作?

我建议不要继承带有生成代码的表单(就像您在收件箱中所做的那样)

如果希望子类(收件箱)添加其他控件,我不会直接在子类上使用设计器,因为我认为当窗体的一半在父类中设计时,VisualStudio窗体设计器将无法很好地发挥作用。如果需要以不同的形式重用窗体的某些部分,则可能需要考虑将窗体的该部分移到单独的用户控件。您可以在此用户控件上使用设计器,然后将用户控件放入表单中


如果您只需要具有相同的表单,请在其他类中保留该表单的实例。将逻辑从窗体(视图)和其他类(控制器)中移开。

我注释掉了原始的“InboxItems”控件声明“:我能问一下你为什么把它注释掉吗?假设DeEnginer分部类在布局表单时使用它,这会导致errorWinforms在构造函数中调用一个名为
InitializeComponent
的方法,在该方法中调用元素的构造函数、订阅事件等。您的子类是否调用父构造函数?我注释了该声明(不是构造函数,
//public System.Windows.Forms.FlowLayoutPanel InboxItems;
),因为这会覆盖继承的控件,这意味着我尝试访问它时继承的控件为null。“这会覆盖继承的控件,这意味着我尝试访问它时继承的控件为null。”控件为
null
,因为您从未在父类中实例化过它,也不是因为重写,特别是因为我在代码中没有看到任何
override
关键字。父构造函数将在子构造函数之前调用。因此,如果父构造函数不执行
…=new…
操作,子构造函数将一无所获抱歉,这是个错误的词…它是“隐藏”继承的成员。父类只包含声明,而表单设计器有构造函数和所有其他实例化代码。啊,所以基本上我是通过有一个小的父类和一个大的子类来反向执行的。我应该在父类中拥有大部分设计,在子类中拥有次要设计。