自定义通用UserControl不会出现在工具箱中

时间:2018-03-24 15:48:40

标签: c# winforms generics user-controls windows-forms-designer

我需要使用泛型创建自定义用户控件,因为我的BindingSource数据源类型为T

public partial class ABMControl<T> : UserControl
{
    public ABMControl()
    {
        InitializeComponent();
        this.bindingSource.Datasource = typeof(T);
    }
}

在表单设计器中,自定义用户控件不会出现在工具箱中,因为它是通用的。 解决方案是什么?

1 个答案:

答案 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>{}