在Windows窗体设计器中加载表单时出现“找不到类型”错误
我有一个.NET 2.0 Windows窗体应用程序,它大量使用ListView
控件。
我已经将ListView
类子类化为模板化的SortableListView
类,因此它可以更明智地显示它如何显示事物并对其进行排序。
不幸的是,这似乎打破了VS2005和2008中的Visual Studio Forms Designer。
程序编译并运行正常,但是当我尝试在设计器中查看拥有的表单时,我得到这些错误:
- 找不到类型’MyApp.Controls.SortableListView’。 请确保引用包含此类型的程序集。 如果此类型是开发项目的一部分,请确保已成功构建项目。
没有可用于此错误的堆栈跟踪或错误行信息
- 变量’listViewImages’要么未声明,要么从未分配过。
在MyApp.Main.Designer.cs行:XYZ列:1
Call stack: at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)
有问题的代码行是它实际添加到表单的位置,而且是
this.imagesTab.Controls.Add( this.listViewImages );
listViewImages声明为
private MyApp.Controls.SortableListView listViewImages;
并在InitializeComponent
方法中实例化,如下所示:
this.listViewImages = new MyApp.Controls.SortableListView();
如前所述,程序编译和运行完美,我已经尝试将SortableListView
类转换为单独的程序集,因此可以单独编译,但这没有区别。
我不知道从哪里开始。 任何帮助,将不胜感激!
它发生在我身上,因为x86 / x64架构。
由于Visual Studio(开发工具本身)没有x64版本,因此无法将x64控件加载到GUI设计器中。
最好的方法可能是在x86下调整GUI,并在必要时为x64编译。
我曾经遇到过这样的问题(不一样)过去我的控件在我的表单的不同命名空间中,即使它在同一个项目中也是如此。 为了解决它,我不得不添加一个
using My.Other.Namespace;
到设计器顶部的生成代码文件。 令人烦恼的是,当设计师重新生成页面时,它一直被吹走。
当您添加listview时,是否将其添加到工具箱中,然后将其添加到表单中?
不,我刚编辑了Main.Designer.cs
并将其从System.Windows.Forms.ListView
更改为MyApp.Controls.SortableListView
怀疑它可能是由于generics使我真正找到了解决方案。
对于我需要为其创建SortableListView的每个类,我定义了一个像这样的“存根类”
class ImagesListView : SortableListView { }
然后使Main.Designer.cs
文件引用这些存根类而不是SortableListView
。
它现在有效,万岁!
值得庆幸的是,我能够做到这一点,因为我的所有类型都是SortableListView
知道的,而我只使用SortableListView
作为减少重复代码的方法。
我也有这个问题,与在* .Designer.cs文件中合并大量SVN更改(与冲突)有关。 解决方案是以图形方式打开设计视图,编辑控件(向左移动然后向右移动)并重新设计。 * .Designer.cs文件神奇地改变了,下一次编译时警告就消失了。
需要说明的是,您需要先修复所有代码合并问题。 这只是迫使VS重新加载它们的工作。
包含MyApp.Controls.SortableListView的程序集是否在GAC中没有安装任何机会呢?
当您添加listview时,是否将其添加到工具箱中,然后将其添加到表单中?
也许你忘了添加:
/// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Release all resources used. /// /// true if managed resources should be removed otherwise; false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } private void InitializeComponent() { // ... this.components = new System.ComponentModel.Container(); // Not necessarily, if You do not use // ... }
我有类似的东西 – 用户控件指的是远程serice(我无法保证在设计时可用)。
MSDN上的这篇post建议我添加
if (this.DesignMode) return;
到控件的Load函数,或者在我的情况下到WCF客户端初始化之前的那一点。 这就是诀窍。
所以
private readonly Client _client = new Client();
变
private Client _client; public new void Load() { if(DesignMode) return; _client = new Client(); }
我遇到过同样的问题。 在我的情况下,这个问题是由于资源初始化。 我将以下代码从InitializeComponent
方法移动到ctor(调用InitializeComponent
)。 之后,此问题得到解决:
this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid));
我曾经也有过一样的问题。 删除我自己的* .Designer.cs文件控件之后问题就解决了。 回到原始代码后,问题仍然解决了。 所以它似乎是Visual Sudio缓存的一个问题。 目前我无法重现这个问题。
如果您遇到问题,请尝试使用该文件夹
C:\ Users \用户YOURNAME \应用程序数据\本地\微软\ VisualStudio的\ VERSION \设计\ ShadowCache
它有用吗?
在我的情况下,问题是我的项目的文件夹的名称! 为什么我这么想:我使用SVN并在’trunk \ SGIMovel’中完美运行。 但是在名为“OS#125 \ SGIMovel”的分支文件夹中,我无法打开设计器以获取使用自定义控件并在trunk文件夹中工作的表单。
刚下车#并且工作得很好。
谢谢你。