我正在尝试清除解决方案中的所有设计器错误,并遇到以下错误:
无法为此文件显示设计器,因为其中的所有类都无法设计。设计者检查了文件中的以下类:DoubleAttributeTextBoxBase ---无法加载基类'NumericAttributeTextBoxBase'。确保已引用程序集并且已构建所有项目。
这些类都在同一个程序集中定义,所以我知道它不是引用问题。我想知道它是否与基类是通用的事实有关。有什么想法吗?
public class DoubleAttributeTextBoxBase : NumericAttributeTextBoxBase<double>
public class NumericAttributeTextBoxBase<T> : TextBox where T : IComparable, IComparable<T>
答案 0 :(得分:9)
正在设计的类的基类必须是非抽象的且非泛型的。使一个继承自泛型类的类可设计。解决方法是在中间插入一个简单的非泛型类:
public partial class DoubleAttributeTextBoxBase
: NumericAttributeTextBoxBaseOfDouble
{
public DoubleAttributeTextBoxBase()
{
InitializeComponent();
}
// Now DoubleAttributeTextBoxBase is designable.
}
public class NumericAttributeTextBoxBaseOfDouble
: NumericAttributeTextBoxBase<double>
{
}
为了使其尽可能简单,您甚至可以将非泛型类放在与要设计的类相同的文件中。只需确保将放在类后面(如上所述),因为设计人员希望文件中的第一个类是正在设计的类。
答案 1 :(得分:1)
我不知道解决方案,自从C#2.0问世以来,这一直是Visual Studio的一个严重限制。我唯一可以说的是在运行时将该控件添加到页面,然后至少你可以让你的设计师回到其他一切。
来自msdn:
您的组件或控件不能是泛型类型,也称为模板类型或参数化类型。设计环境不支持泛型类型。