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

Car*_*ine 7 c# generics inheritance windows-forms-designer visual-studio

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

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

    public BaseForm()
    {
        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public partial class SampleForm : BaseForm<SamplePresenter>
{
    public SampleForm()
    {
        InitializeComponent();
        Presenter = new SamplePresenter();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

它给出了这个警告:

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

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

我怎么能克服这个?

PS我看了这篇文章,但并没有真正了解如何解决这个问题.

Pat*_*man 10

设计师不支持这一点,如该帖子中所述.

你需要这个基类:

public partial class SampleFormIntermediate : BaseForm<SamplePresenter>
{
    public SampleFormIntermediate()
    {
        InitializeComponent();
        Presenter = new SamplePresenter();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public partial class SampleForm : SampleFormIntermediate
{
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,Visual Studio'了解'在设计器中打开什么以及如何打开它.