C# 如何继承通用表单并在VisualStudio设计器中打开它?

C# 如何继承通用表单并在VisualStudio设计器中打开它?,c#,visual-studio,generics,inheritance,windows-forms-designer,C#,Visual Studio,Generics,Inheritance,Windows Forms Designer,在我的应用程序中,我有一个BaseForm,其中包含一个泛型成员: public partial class BaseForm<T> : Form where T : Presenter { protected T Presenter; public BaseForm() { InitializeComponent(); } } public分部类基窗体:其中T:Presenter的窗体 { 受保护的T演示者; 公共基表() { 初

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

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

    public BaseForm()
    {
        InitializeComponent();
    }
}
public分部类基窗体:其中T:Presenter的窗体
{
受保护的T演示者;
公共基表()
{
初始化组件();
}
}
现在我需要的是从我的基窗体继承一个窗体

public partial class SampleForm : BaseForm<SamplePresenter>
{
    public SampleForm()
    {
        InitializeComponent();
        Presenter = new SamplePresenter();
    }
}
public分部类SampleForm:BaseForm
{
公共样本形式()
{
初始化组件();
Presenter=新的SamplePresenter();
}
}
问题是Visual Studio设计器没有显示从
BaseForm
派生的
SampleForm

它给出了以下警告:

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

SampleForm---无法加载基类“Invoice.BaseForm”。确保部件已被引用,并且已生成所有项目。0 0

我怎样才能克服这个问题


顺便说一句,我看过了,但没有真正了解如何解决这个问题。

设计师不支持这一点,正如那篇文章中所描述的

您需要这个基类:

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

这样,Visual Studio“理解”在设计器中打开什么以及如何打开它。

在不同的继承类中使用不同的演示者不是一个好主意。@Magnus:OPs问题集中在Visual Studio designer集成上。没别的了。我想这就是我想要的。谢谢,这正是我想要的。现在我可以有一个测试包,在其中我可以用设计器打开UI,并通过泛型实现实际的项目。再次感谢:)@Magnus您还可以提供一份文档或一些其他相关链接,帮助您找到解决方案吗?这个解决方案对我很有效,现在我想知道为什么设计师会这样做。这个答案非常有用,特别是考虑到这个解决方案显然是违反直觉的。谢谢
public partial class SampleForm : SampleFormIntermediate
{
}