C# Windows窗体设计器中的设计时错误
我在同一命名空间上有以下类:C# Windows窗体设计器中的设计时错误,c#,.net,winforms,visual-studio-2010,C#,.net,Winforms,Visual Studio 2010,我在同一命名空间上有以下类: public partial class BaseForm : Form { bool isNew = false; public BaseForm() {} public BaseForm(bool isNew) { InitializeComponent(); this.isNew = isNew; } . . . } public partial c
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”win窗体的设计窗格
这是什么意思?如何使“BitSetForm”win表单的设计窗格再次显示?您需要向
基本表单添加一个无参数构造函数
它甚至可以是私有的;它只需要存在
如果没有一个实例,设计器将无法创建要在设计图面中显示的BaseForm实例
记住在构造函数中调用InitializeComponent
在设计器实例化基类之前,您需要构建应用程序。如果您的子类表单有一系列错误,这可能非常困难
设计器只能实例化具有默认无参数构造函数的类。这意味着您的基类的基形式(bool isNew)永远不会被设计器调用。这意味着InitializeComponent也不会。您应该将InitializeComponent移动到无参数构造函数,并让第二个构造函数调用第一个构造函数
默认情况下,InitializeComponent是私有的。您不应该将其可见性更改为protected,因为它是私有的,所以不需要new
修改器
InitializeComponent不应该以这种方式链接到基类。它只能由构造函数调用
考虑到所有这些问题,我强烈建议您要么放弃Windows窗体继承,要么至少将基类移动到单独的程序集中。我已经试过很多次了,但这太麻烦了
需要记住的关键是,当您在设计器中查看表单时,设计器并不是在创建您看到的表单的实例,而是在创建基类的实例。在运行时,情况显然不是这样。因此,经常会看到不同的运行时/设计时行为。正如@SLaks所提到的,您需要在类的构造函数中使用InitializeComponent。实际上,我会把它放在无参数实例中。然后,在布尔型的构造函数中,我将更改为
public partial class BaseForm : Form
{
bool isNew = false;
public BaseForm()
{
InitializeComponent();
}
public BaseForm(bool isNew) : this()
{
this.isNew = isNew;
}
}
因此,如果您希望在BaseForm定义中执行其他内容,而不考虑参数化启动,那么也会调用这些内容。这样,无论哪种情况下都会触发InitializeComponent。第一项“需要构建应用程序”帮助了我,谢谢!