WinForms继承

WinForms继承,winforms,generics,inheritance,designer,Winforms,Generics,Inheritance,Designer,我已经使用表单继承有一段时间了,但是没有对下面的方法做太多的研究。只需创建一个新类而不是表单,并从现有表单继承,然后根据需要将所需控件转换为受保护的控件。VisualStudio2010设计师的作品魅力无穷。如果需要更多控制,则始终可以重写基本方法 我现在创建的通用表单如下: 分部类EntityCollectionEditor:表单,其中T:ISomeInterface 由简单的非设计器类继承的此类表单会出现以下错误: 无法为此文件显示设计器,因为无法设计其中的任何类。设计器检查了文件中的以下类

我已经使用表单继承有一段时间了,但是没有对下面的方法做太多的研究。只需创建一个新类而不是表单,并从现有表单继承,然后根据需要将所需控件转换为受保护的控件。VisualStudio2010设计师的作品魅力无穷。如果需要更多控制,则始终可以重写基本方法

我现在创建的通用表单如下:
分部类EntityCollectionEditor:表单,其中T:ISomeInterface

由简单的非设计器类继承的此类表单会出现以下错误:
无法为此文件显示设计器,因为无法设计其中的任何类。设计器检查了文件中的以下类:XYZ。无法加载基类EntityCollectionEditor。确保部件已被引用,并且已生成所有项目


快速解决方案很好,但我也在寻找一篇好的资源/文章来教育自己。

目前,winforms designer不支持通用表单/控件

我使用的唯一解决方法是创建特定的表单类型:

class GenericBaseForm<T> : Form
{ }

class IntForm : GenericBaseForm<Int>
{ }

class StringForm : GenericBaseForm<String>
{ }
类GenericBaseForm:Form
{ }
类IntForm:GenericBaseForm
{ }
类StringForm:GenericBaseForm
{ }

现在可以在设计器中使用特定表单。不幸的是,如果您有很多特定的表单,那么这可能不是一个理想的解决方案。

您不能从该类继承并在继承的表单类上使用设计器。设计器需要能够创建基类的实例,它不能提供t类型参数。基本窗体没有可视元素。它在运行时创建所有内容。不过,我确实在上面加了一个按钮。我应该做的是使用一个简单的类,从表单继承并使其通用。VS似乎从此处正确地生成了备份资源文件。对此不确定。尝试创建一个新类XYZ,并将其编码为读取
类XYZ:Form{}
。双击该类将在设计器中打开一个基本窗体。但不确定这是否可以用于生产。我不想让事情复杂化。