如何继承通用表单并在Visual Studio设计器中打开它?

时间:2015-03-30 14:46:13

标签: c# visual-studio generics inheritance windows-forms-designer

在我的应用程序中,我有一个BaseForm,其中包含一个通用成员:

public partial class BaseForm<T> : Form where T : Presenter
{
    protected T Presenter;

    public BaseForm()
    {
        InitializeComponent();
    }
}

现在我需要的是一个从我的BaseForm继承的表单

public partial class SampleForm : BaseForm<SamplePresenter>
{
    public SampleForm()
    {
        InitializeComponent();
        Presenter = new SamplePresenter();
    }
}

问题是Visual Studio设计器没有显示从SampleForm派生的BaseForm<T>

它给出了这个警告:

  

警告1无法为此文件显示设计器,因为无法设计其中的任何类。设计者检查了文件中的以下类:

     

SampleForm ---基类&#39; Invoice.BaseForm&#39;无法加载。确保已引用程序集并且已构建所有项目。 0 0

我怎样才能克服这一点?

P.S。我看了this post,但并没有真正了解如何解决这个问题。

1 个答案:

答案 0 :(得分:10)

设计师并不支持这一点,如该帖所述。

你需要这个基类:

public partial class SampleFormIntermediate : BaseForm<SamplePresenter>
{
    public SampleFormIntermediate()
    {
        InitializeComponent();
        Presenter = new SamplePresenter();
    }
}

您需要将此类用于Visual Studio设计器:

public partial class SampleForm : SampleFormIntermediate
{
}

通过这种方式,Visual Studio可以理解&#39;在设计师中打开什么以及如何打开它。