当前位置: 首页 > 编程语言 > C#

在WindowsFormsDesigner中加载窗体时出现“TypeNotFound”错误分享

时间:2023-04-10 13:16:23 C#

ListView控件。我已将ListView类子类化为模板化的SortableListView类,因此它可以更明智地显示和排序内容。不幸的是,这似乎破坏了VS2005和2008中的VisualStudioFormsDesigner。该程序编译并运行良好,但是当我尝试在设计器中查看拥有的表单时,出现以下错误:没有堆栈跟踪或错误行信息可用于此错误InMyApp.Main.Designer.csLine:ColumnXYZ:1调用堆栈:在System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager管理器,StringexceptionText,StringhelpLink)在System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManagerSystem表达式管理器,String表达式管理器).ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManagermanager,Stringname,CodeExpressionexpression)atSystem.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManagerformmanager,CodeStatementstatement)是它实际添加到问题和这个的代码行。imagesTab.Controls.Add(this.listViewImages);listViewImages声明为私有MyApp.Controls.SortableListViewlistViewImages;并在InitializeComponent方法中实例化如下:this.listViewImages=newMyApp.Controls.SortableListView();如前所述,该程序可以完美编译和运行,我尝试将SortableListView类转换为一个单独的程序集,以便可以单独编译它,但没有任何区别我不知道从哪里开始。任何帮助将不胜感激!它发生在我身上是因为x86/x64架构。由于VisualStudio(开发工具本身)没有x64版本,因此无法将x64控件加载到GUI设计器中。可能最好的方法是在x86下调整GUI,并在必要时针对x64进行编译。过去我遇到过这个问题(不一样),我的控件与我的表单位于不同的命名空间中,即使它在同一个项目中。要修复它,我必须添加一个usingMy.Other.Namespace;到设计器顶部生成的代码文件。恼人的是,当设计师重新生成页面时,它总是被吹走。添加listview的时候是先添加到工具箱,再添加到窗体吗?不,我只是编辑了Main.Designer.cs并将其从System.Windows.Forms.ListView更改为MyApp.Controls.SortableListView怀疑这可能是由于泛型让我找到了解决方案。对于我需要为其创建SortableListView的每个类,我定义了一个“存根类”,例如此类ImagesListView:SortableListView{},然后使Main.Designer.cs文件引用这些存根类而不是SortableListView。现在可以用了,万岁!值得庆幸的是,我能够做到这一点,因为SortableListView知道我的所有类型,并且我只是将SortableListView用作减少代码重复的一种方式。我也有这个问题,与在*.Designer.cs文件中合并大量SVN更改(有冲突)有关。解决方案是以图形方式打开设计视图,编辑控件(向左然后向右移动)并重新设计。*.Designer.cs文件神奇地改变了,在我下次编译它时警告消失了。澄清一下,您需要先解决所有代码合并问题。强制VS重新加载它们只是一项工作。包含MyApp.Controls.SortableListView的程序集是否没有安装在GAC中?添加listview的时候是先添加到工具箱,再添加到窗体吗?也许您忘记添加://////必需的设计器变量。///privateSystem.ComponentModel.IContainercomponents=null;//////释放所有使用的资源。//////如果托管资源应该被删除,则为真;否则为真;错误的。protectedoverridevoidDispose(booldisposing){if(disposing&&(components!=null)){components.处置();}根据。处置(处置);}privatevoidInitializeComponent(){//...this.components=newSystem.ComponentModel.Container();//不一定,如果你不使用//...}我有这样的东西-用户控件指的是远程服务(我不能保证在设计时可用)。MSDN上的这篇文章建议我添加if(this.DesignMode)return;到控件的Load函数,或者在我的例子中到WCF客户端初始化之前的点。这就是诀窍。所以privatereadonlyClient_client=newClient();成为私人客户_客户;publicnewvoidLoad(){if(DesignMode)返回;_client=新客户端();}我有同样的问题。在我的例子中,这个问题是由于资源初始化引起的。我将以下代码从InitializeComponent方法移至构造函数(调用InitializeComponent)。之后就解决了这个问题:this->resources=(gcnewSystem::ComponentModel::ComponentResourceManager(XXX::typeid));我曾经遇到过同样的问题。删除我自己的*.Designer.cs文件控件后问题就解决了。回到原来的代码后,问题还是解决了。所以这似乎是VisualSudio缓存的问题。目前我无法重现这个问题。如果您遇到问题,请尝试使用此文件夹C:\Users\Users\YOURNAME\ApplicationData\Local\Microsoft\VisualStudio\VERSION\DesignShadowCache它是否有效?在我的例子中,问题是我的项目文件夹的名称!为什么我这么认为:我使用SVN,它在“trunkSGIMovel”中完美运行。但是在名为“OS#125SGIMovel”的分支文件夹中,我无法打开使用自定义控件并在主干文件夹中工作的表单的设计器。刚下#,它工作正常。谢谢。以上就是C#学习教程:在Windows窗体设计器中加载窗体时出现“Typenotfound”错误。分享的全部内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: