我需要使用泛型创建自定义用户控件,因为我的BindingSource
数据源类型为T
public partial class ABMControl<T> : UserControl
{
public ABMControl()
{
InitializeComponent();
this.bindingSource.Datasource = typeof(T);
}
}
在表单设计器中,自定义用户控件不会出现在工具箱中,因为它是通用的。 解决方案是什么?
答案 0 :(得分:2)
将控件从工具箱中删除到表单上时,您要求设计人员创建该控件的实例。如果不确定GenericControl<T>
,则无法创建T
的实例。相反,您需要一个GenericControl<SomeClass>
的实例。
因此,通用控件不会出现在工具箱中是完全有道理的,因为它在设计器中没有用处,设计器在创建实例时不知道它应该用于通用参数的类型。
从 VS2015.1 开始,Windows窗体设计器显示具有通用基类的类,没有任何问题。因此,对于较新版本的VS,不再需要第一个linked中的comment变通方法。以下类将在设计器中显示没有任何问题:
public class SomeClassControl:GenericControl<SomeClass>
{
}
对于旧版本的Visual Studio,请使用链接帖子中描述的解决方法:
public class SomeClassControl:SomeClassControlBase
{
}
public class SomeClassControlBase:GenericControl<SomeClass>{}