How to avoid error "Constructor on type 'MyType' not found" when inheriting a base class
Asked Answered
A

2

36

I have a Visual Studio 2010 Windows Forms app which includes a Form base class that other classes will inherit. The base class' constructor takes a parameter that the child classes will pass to the base class.

Example:

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

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

The problem that I'm running into is, when I attempt to open the ChildForm in VisualStudio's Design View mode, I receive the following error:

Constructor on type 'MyProject.BaseForm' not found.

Note: regardless of the error, the project compiles and runs fine.

I can avoid the error if I overload the constructor with one that does not contain any parameters.

Example: (This gets rid of the error)

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();
    }
}

My question is, how can I create a base class that does not include a parameterless constructor and avoid the Design View error?

Amagasaki answered 1/5, 2013 at 20:32 Comment(0)
S
43

That is completely impossible.

The form you see in the design view is an actual instance of your base class.
If there is not default constructor, the designer cannot create that instance.

You can mark the constructor with the [Obsolete("Designer only", true)], and make it throw an exception if called when not in the designer, to prevent other people from calling it.

Shaquitashara answered 1/5, 2013 at 20:34 Comment(3)
Can the required parameterless instance constructor be private?Keenankeene
@JeppeStigNielsen - Yes. That's what I ended up doing and all is well.Amagasaki
Make sure to compile the project the base class is on, if different from the inherited class.Mollymollycoddle
B
0

You need to adjust your BaseForm output type, In the properties for the project, change the Output type from Windows Application to Class Library.

ref: https://learn.microsoft.com/en-us/dotnet/framework/winforms/advanced/walkthrough-demonstrating-visual-inheritance

Brynhild answered 25/3, 2020 at 9:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.