自定义的通用用户控件未在工具箱中显示

3

我需要创建一个带有泛型的自定义用户控件,因为我有一个数据源类型为TBindingSource

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

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

可能是WinForm UserControl的通用基类的重复问题。 - TnTinMn
当从工具箱中拖放控件时,您正在命令设计师创建该控件的实例。您无法创建GenericControl<T>的实例。相反,您需要一个GenericControl<SomeClass>的实例。因此,通用控件在工具箱中不出现完全是有道理的,因为它在设计师中没有用途。 - Reza Aghaei
同样从VS2015.1开始,设计师可以展示具有泛型基类的类,而不会出现任何问题。因此,在较新版本的VS中不再需要在第一条评论中链接的解决方法。 - Reza Aghaei
1个回答

6

这是工具箱的预期行为。

当从工具箱中将控件拖到表单上时,您正在命令设计器创建该控件的实例。您无法创建未确定泛型类型 TGenericControl<T> 实例。相反,您需要一个 GenericControl<SomeClass> 的实例。

因此,泛型控件不显示在工具箱中完全合理,因为它在设计器中没有使用,并且设计器在创建实例时不知道应该使用哪个类型作为泛型参数。

关于设计器,在考虑这篇文章之后:Generic Base Class for UserControlVS2015.1以来,Windows Forms Designer可以正常显示具有通用基类的类。以下类将在设计器中正常显示:

public class SomeClassControl:GenericControl<SomeClass>
{
}

对于旧版本的Visual Studio,使用链接帖子中描述的解决方法:

public class SomeClassControl:SomeClassControlBase
{
}
public class SomeClassControlBase:GenericControl<SomeClass>{}

这篇文章是否解答了你的问题? :) - Reza Aghaei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接