5

我正在尝试清理我们解决方案中的所有设计器错误并遇到以下错误:

无法为此文件显示设计器,因为无法设计其中的任何类。设计器检查了文件中的以下类: DoubleAttributeTextBoxBase --- 无法加载基类“NumericAttributeTextBoxBase”。确保已引用程序集并且已构建所有项目。

这些类都在同一个程序集中定义,所以我知道这不是参考问题。我想知道它是否与基类是通用的事实有关。有任何想法吗?

public class DoubleAttributeTextBoxBase : NumericAttributeTextBoxBase<double>

public class NumericAttributeTextBoxBase<T> : TextBox where T : IComparable, IComparable<T>
4

2 回答 2

9

正在设计的类的基类必须是非抽象的和非泛型的。使从泛型类继承的类可设计。解决方法是在中间插入一个普通的非泛型类:

public partial class DoubleAttributeTextBoxBase
    : NumericAttributeTextBoxBaseOfDouble
{
    public DoubleAttributeTextBoxBase()
    {
        InitializeComponent();
    }

    // Now DoubleAttributeTextBoxBase is designable.
}

public class NumericAttributeTextBoxBaseOfDouble
    : NumericAttributeTextBoxBase<double>
{
}

为了使这尽可能简单,您甚至可以将非泛型类与您要设计的类放在同一个文件中。只要确保将它放在类之后(就像我在上面所做的那样),因为设计者希望文件中的第一个类是正在设计的类。

于 2011-07-29T19:36:21.880 回答
1

我不知道有什么解决方案,自从 C# 2.0 出来以来,这一直是 Visual Studio 的一个严重限制。我唯一能说的是在运行时将该控件添加到页面中,然后至少您可以让您的设计师回来处理其他所有事情。

来自 msdn:

您的组件或控件不能是泛型类型,也称为模板类型或参数化类型。设计环境不支持泛型类型。

http://msdn.microsoft.com/en-us/library/ms171843.aspx

于 2011-07-29T18:23:19.033 回答