有两种形式。 Form2 源自 Form1 。
但我在设计模式中遇到 Form2 问题,如下面的屏幕截图所示。
如果我对此this._presenter.Retrive();
发表评论,它会正常运作。是怎么回事?如何解决问题?
UPD: 如果我将删除throw new NotImplementedException();并将插入,例如,MessageBox.Show(" Test");,每次打开Form2时,MessageBox都会显示为运行应用程序。
窗体2
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();
}
}
答案 0 :(得分:11)
throw new NotImplementedException();
但是还有一件重要的事情你应该注意。
OP:如果我将删除throw new NotImplementedException();还会 插入,例如,MessageBox.Show(" Test");,每次我打开 Form2 MessageBox将显示为运行应用程序
如果您发现,则Form1
的设计者不会收到此错误。但是因为Form2
继承自Form1
,您会收到此错误。
这是因为,当您在设计器中打开表单时,设计人员会为您的表单创建一个基类的实例来显示您的表单。它意味着不是创建Form2
的实例,而是创建Form1
的实例,运行Form1
构造函数并将其托管在设计图面中,然后反序列化InitializeComponent
中的代码Form2
的{{1}}并将组件放在设计图面上。
这就是您在设计师中看到Form2
时收到错误的原因,但在设计师中打开Form1
时没有收到任何错误。
解决问题:
此外,您可以使用Form_Load
中的DesignMode
属性阻止在Form1_Load
fd处于设计模式下运行代码,以防止出现此错误:
if(DesignMode) 返回;
您可能会发现这些答案有用且有趣:
答案 1 :(得分:4)
是怎么回事以及如何解决这个问题?
这是相当微不足道的。如果你要调试你的代码,你会发现你在方法调用中抛出NotImplementedException
,这就是为什么评论出来的原因:
public void Retrive()
{
throw new NotImplementedException();
}
也许你想要实现实际的方法逻辑而不是抛出。
答案 2 :(得分:1)
评论 抛出新内容 NotImplementedException(); 对我来说运作正常 现在,最后的方法将类似于:
public void Retrive()
{
//throw new NotImplementedException();
}