There is two forms. Form2 is derived from Form1.
But I have an issue with Form2 in design mode as shown on the screenshot below.
If I will comment this this._presenter.Retrive();
it will work fine. Whats going on and how to solve the problem?
UPD: If I will remove the throw new NotImplementedException(); and will insert, for example, MessageBox.Show("Test");, every time I will open Form2 the MessageBox will appears as though I run the application.
Form2
namespace InheritanceDemo
{
public partial class Form2 : Form1
{
public Form2()
{
InitializeComponent();
}
}
}
Form1
namespace InheritanceDemo
{
public partial class Form1 : Form
{
protected IPresenter _presenter;
public Form1()
{
InitializeComponent();
_presenter = new Presenters();
}
private void Form1_Load(object sender, EventArgs e)
{
this._presenter.Retrive();
}
}
public class Presenters : IPresenter
{
public void Retrive()
{
throw new NotImplementedException();
}
}
public interface IPresenter
{
void Retrive();
}
}
The main cause of error is what Fᴀʀʜᴀɴ and Yuval said:
throw new NotImplementedException();
But there is another important thing that you should pay attention to.
OP: If I will remove the throw new NotImplementedException(); and will insert, for example, MessageBox.Show("Test");, every time I will open Form2 the MessageBox will appears as though I run the application
If you notice, you will not receive this error in designer of Form1
. But because your Form2
inherits from Form1
you receive this error.
It's because, when you open a form in designer, the designer makes an instance of base class of your form to show your form. It means instead of creating an instance of Form2
it creates an instance of Form1
, runs Form1
constructor and hosts it in the design surface, and then deserializes the codes in InitializeComponent
of Form2
and puts components on the design surface.
This is why you receive the error when you see your Form2
in designer, but you didn't receive any error while opening the Form1
in designer.
To solve the problem:
Also you can prevent the error by prevent running the code in Form_Load
fd you are at design mode using DesignMode
property, in Form1_Load
:
if (DesignMode) return;
You probably will find these answers helpful and interesting: