我在同一名称空间上有这些类:
public partial class BaseForm : Form
{
bool isNew = false;
public BaseForm() {}
public BaseForm(bool isNew)
{
InitializeComponent();
this.isNew = isNew;
}
.
.
.
}
public partial class BitSetForm : BaseForm
{
public BitSetForm(bool isNew) : base(isNew)
{
InitializeComponent();
}
new private void InitializeComponent()
{
.
.
.
}
}
1)我收到了这个警告:找不到类型“..BaseForm”,请确保引用包含此类型的程序集。如果此类型是开发项目的一部分,请确保使用当前平台或任何CPU的设置成功构建项目。
2)Windows窗体设计器中出现设计时错误,并隐藏“BitSetForm”窗体的设计窗格。
这是什么意思?我该怎么做才能再次显示“BitSetForm”win-form显示的设计窗格?
答案 0 :(得分:5)
您需要为BaseForm
添加无参数构造函数
它甚至可以是private
;它只需要存在。
如果没有,设计人员无法创建要在设计图面中显示的BaseForm实例。
请记得在构造函数中调用InitializeComponent
。
答案 1 :(得分:2)
好几件事......
new
修饰符。鉴于所有这些问题,我强烈建议放弃Windows窗体继承或至少将基类移动到单独的程序集中。我已经尝试了很多次,这比它的价值更麻烦。
要记住的关键是,当您在设计器中查看表单时,设计人员不会创建您看到的表单实例 - 它正在创建基类的实例。在运行时,显然不是这种情况。因此,看到不同的运行时/设计时行为是很常见的。
答案 2 :(得分:2)
如@SLaks所述,您需要在类的构造函数中使用InitializeComponent。我实际上在无参数实例中有它。然后,在你布尔的构造函数中,我将改为
public partial class BaseForm : Form
{
bool isNew = false;
public BaseForm()
{
InitializeComponent();
}
public BaseForm(bool isNew) : this()
{
this.isNew = isNew;
}
}
因此,如果您想要在BaseForm定义中执行其他任何内容而不管参数化启动,那么也会调用它。这样,InitializeComponent在EITHER情况下被触发。