Mik*_*hin 7 .net c# inheritance windows-forms-designer winforms
有两种形式.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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
Rez*_*aei 12
throw new NotImplementedException();
Run Code Online (Sandbox Code Playgroud)
但是你应该注意另一个重要的事情.
OP:如果我将删除throw new NotImplementedException(); 并将插入,例如,MessageBox.Show("Test");,每次我打开Form2时,MessageBox将显示为好像我运行应用程序
如果您注意到,您将不会在设计器中收到此错误Form1.但是因为你Form2从Form1你那里继承了这个错误.
这是因为,当您在设计器中打开表单时,设计器会创建表单基类的实例来显示您的表单.这意味着代替创建一个实例Form2它创建的一个实例Form1,运行Form1构造和承载它在设计表面上,然后在反序列化代码InitializeComponent的Form2,并把在设计表面上的部件.
这就是您在看到Form2设计人员时收到错误的原因,但是在打开Form1设计器时没有收到任何错误.
解决问题:
此外,您可以通过Form_Load使用DesignMode属性阻止在fd处于设计模式下运行代码来防止错误Form1_Load:
if(DesignMode)返回;
您可能会发现这些答案有用且有趣:
这是怎么回事以及如何解决问题?
这是相当微不足道的。如果您要调试代码,您会发现您NotImplementedException在方法调用中抛出了一个,这就是注释掉它的原因:
public void Retrive()
{
throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
也许您想实现实际的方法逻辑,而不是抛出异常。
| 归档时间: |
|
| 查看次数: |
46845 次 |
| 最近记录: |