在设计器中加载表单时出现“找不到类型”错误

Posted

技术标签:

【中文标题】在设计器中加载表单时出现“找不到类型”错误【英文标题】:“Could not find type” error loading a form in the Designer 【发布时间】:2011-01-01 08:34:14 【问题描述】:

这和这个问题完全相同:“Could not find type” error loading a form in the Designer

在任何人结束我的问题之前,请阅读该问题。你会意识到它没有得到真正的答案。我希望从这个问题中得到完整的答案(而不是解决方法)。

当我创建一个从 Control 派生并使用泛型的类时,该类无法加载到设计器中。

这是一个例子:

class OwnerDrawnListBox<T> : System.Windows.Forms.Control


    private readonly List<T> _items;

    // Other list box private stuff here

    public OwnerDrawnListBox()
    
        _items = new List<T>();
    

    // More List box code

然后我在我的设计器中使用它:

private OwnerDrawnListBox<Bag> lstAvailable;

private void InitializeComponent()

    // Used to be System.Windows.Forms.ListBox();
    this.lstAvailable = new ARUP.ScanTrack.Mobile.OwnerDrawnListBox<Bag>(); 
    // Other items

如果泛型类是子类(到非泛型),那么引用的问题说它可以正常工作(即,如果我创建了Class BagOwnerDrawListBox: OwnerDrawnListBox&lt;Bag&gt;)。

我想知道有没有办法“修复”这个问题,以便设计师接受通用项目?

旁注:我使用的是 Compact Framework。

【问题讨论】:

我认为您不会得到比其他问题更好的答案。设计器不支持通用控件,因此非通用子类是唯一的答案。是的,为您要使用的每个类型参数创建一个非泛型子类很乏味,但是每次您使用新类型参数创建一个新控件时,您都必须编写一些代码/设置一些设计时属性,所以它是只需几次额外的鼠标点击和键盘敲击。您仍然可以将控件作为参数传递给期望 OwnerDrawnListBox. 的方法 【参考方案1】:

据我所知,Windows 窗体设计器不支持通用控件。保持设计器支持的唯一方法是使用非泛型子类,就像你说的那样。无论如何,任何“修复”都只是一种解决方法。

【讨论】:

以上是关于在设计器中加载表单时出现“找不到类型”错误的主要内容,如果未能解决你的问题,请参考以下文章

VS 2010 设计器在 Windows7 中出现错误“找不到类型 XYZ”。在 XP 中运行良好

找不到类型的验证器:java.lang.Integer

C#程序在VS编译器加载时出现找不到方法,无法显示该程序窗体设计器

无法在设计器中加载文件或程序集 System.Componentmodel.Annotations 4.2.0.0

Xcode - 在 AppDelegate 中加载声音时出现 Apple Mach-O 链接器错误

在 Xamarin Studio 中找不到类型或命名空间名称“页面”