有两种形式。 Form2 是从 Form1 派生的。

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

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

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

c# - 该方法或操作未实现-LMLPHP

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

最佳答案

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

throw new NotImplementedException();

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



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

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

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

解决问题:
  • 您可以删除实现,并将实现留空。
  • 也可以通过在Form_Load中使用 DesignMode 属性阻止处于设计模式的Form1_Load fd中的代码来防止错误:

    如果(DesignMode)
    返回;

  • 您可能会发现以下答案很有帮助且有趣:
  • Can't view designer when coding a form in C#
  • Show controls added programatically in WinForms app in Design view
  • 关于c# - 该方法或操作未实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34567635/

    10-17 00:21