未实现方法或操作

问题描述 投票:7回答:3

有两种形式。 Form2衍生自Form1

但是在设计模式下,Form2出现问题,如下面的屏幕快照所示。

如果我对此this._presenter.Retrive();发表评论,它将正常工作。发生了什么事以及如何解决问题?

UPD:如果我要删除抛出新的NotImplementedException();并且将插入,例如MessageBox.Show(“ Test”);,每次我打开Form2时,MessageBox都会像我在运行该应用程序一样显示。

enter image description here

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();
    }
}
c# .net winforms inheritance windows-forms-designer
3个回答
12
投票

错误的主要原因是FᴀʀʜᴀɴYuval说的是:

throw new NotImplementedException();

但是还有另一件事要注意。

OP:如果我要删除引发新的NotImplementedException();还会每次打开时都插入例如MessageBox.Show(“ Test”);Form2,将显示MessageBox,就像我运行该应用程序一样

如果您注意到,您将不会在Form1的设计器中收到此错误。但是由于Form2继承自Form1,因此您会收到此错误。

这是因为,当您在设计器中打开表单时,设计器会创建表单的基类的实例以显示您的表单。这意味着不是创建Form2的实例,而是创建Form1的实例,运行Form1构造函数并将其托管在设计图面上,然后反序列化InitializeComponentForm2中的代码并将组件放在设计图。

这就是为什么在设计器中看到Form2时收到错误,但在设计器中打开Form1时没有收到任何错误。

解决问题:

  • 您可以删除实现,并将实现留空。
  • [您也可以通过在设计模式下使用Form_Load中的DesignMode属性阻止运行在DesignMode中的代码来防止错误,>

    如果(DesignMode)返回;

  • 您可能会发现这些答案有用且有趣:


4
投票

发生了什么事以及如何解决问题?


1
投票

Commenting out

© www.soinside.com 2019 - 2024. All rights reserved.