32

我有一个 Visual Studio 2010 Windows Forms 应用程序,其中包含一个其他类将继承的 Form 基类。基类的构造函数采用子类将传递给基类的参数。

例子:

public partial class BaseForm : Form
{
    public BaseForm(int number)
    {
        InitializeComponent();
    }
}

public partial class ChildForm : BaseForm
{
    public ChildForm(int number)
        : base(number)
    {
        InitializeComponent();
    }
}

我遇到的问题是,当我尝试在 VisualStudio 的设计视图模式下打开 ChildForm 时,我收到以下错误:

找不到类型“MyProject.BaseForm”的构造函数。

注意:无论错误如何,项目都能正常编译并运行。

如果我用不包含任何参数的构造函数重载构造函数,我可以避免错误。

示例:(这消除了错误)

public partial class BaseForm : Form
{
    public BaseForm(int number)
    {
        InitializeComponent();
    }

    public BaseForm()
    {
        InitializeComponent();
    }
}

public partial class ChildForm : BaseForm
{
    public ChildForm(int number)
        : base(number)
    {
        InitializeComponent();
    }
}

我的问题是,如何创建不包含无参数构造函数的基类并避免设计视图错误?

4

2 回答 2

38

那是完全不可能的。

您在设计视图中看到的表单是基类的实际实例。
如果没有默认构造函数,则设计者无法创建该实例。

您可以用 标记构造函数[Obsolete("Designer only", true)],并使其在不在设计器中调用时抛出异常,以防止其他人调用它。

于 2013-05-01T20:34:01.467 回答
0

您需要调整 BaseForm 输出类型,在项目的属性中,将输出类型从 Windows 应用程序更改为类库。

参考: https ://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/walkthrough-demonstrating-visual-inheritance

于 2020-03-25T09:27:27.567 回答