我有一个.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.SortableListViewlistViewImages;
并在InitializeComponent
方法中实例化如下:
this.listViewImages = new MyApp.Controls.SortableListView();
正如前面提到的,程序编译和运行完美,我已经尝试将SortableListView
类转换为单独的程序集,因此它可以单独编译,但这没有区别.
我不知道从哪里开始.任何帮助,将不胜感激!
它发生在我身上,因为x86/x64架构.
由于Visual Studio(开发工具本身)没有x64版本,因此无法将x64控件加载到GUI设计器中.
最好的方法可能是在x86下调整GUI,并在必要时为x64编译.
当您添加listview时,是否将其添加到工具箱中,然后将其添加到表单中?
不,我刚刚编辑Main.Designer.cs
并将其更改System.Windows.Forms.ListView
为MyApp.Controls.SortableListView
怀疑它可能是由于泛型使我真正找到了解决方案.
对于我需要为其创建SortableListView的每个类,我定义了这样的"存根类"
class ImagesListView : SortableListView{ }
然后使Main.Designer.cs
文件引用这些存根类而不是SortableListView
.
它现在有效,万岁!
值得庆幸的是,我能够做到这一点,因为我的所有类型都是预先知道的,而我只是使用它SortableListView
作为减少重复代码的方法.
在过去,我有一个像这样的问题(不一样)我的控件在我的表单的不同命名空间中,即使它在同一个项目中.为了解决它,我不得不添加一个
using My.Other.Namespace;
到设计器顶部的生成代码文件.令人讨厌的是,当设计师重新生成页面时,它一直被吹走.
我也有这个问题,与在*.Designer.cs文件中合并大量SVN更改(与冲突)有关.解决方案是以图形方式打开设计视图,编辑控件(向左移动然后向右移动)并重新设计.*.Designer.cs文件神奇地改变了,下一次编译时警告就消失了.
要清楚,您需要首先修复所有代码合并问题.这只是迫使VS重新加载它们的工作.