我有一个WinForm
应用程序。我也为它创建了自己的User Control
。一切都很好。直到今天,当我尝试将其添加回我的程序时,我收到了错误消息(我从未将其删除.Visual Studio确实如此)。
无法加载工具箱项#UserControlName。它将从工具箱中删除。
我在我的解决方案资源管理器中有它,但在此错误后它从我的工具箱中消失了。我也收到警告说:
'#UserControlName'永远不会被赋值,并且将始终具有其默认值null。
当我看到我的设计师代码时,这是真的。但我没有用我的设计师代码做任何事情。我的用户控件是在那里定义的,但没有实例化。我怎么能把它放回去?
这与我将构建平台从x32
更改为x64
这一事实有什么关系吗?如果是这种情况,我会感到惊讶,因为该程序在更改后工作正常。
在这些时候,你将被迫修改设计师代码。只要您不对设计器代码进行重大更改,就不应该破坏任何内容。为了安全起见,重新实例化实例化其他控件的对象(靠近页面顶部)。设计师应填写空白等属性。
这也应该将控件返回到工具箱。
我的一个应用程序遇到了同样的问题,但找不到解决方案。所以我手动创建了用户和自定义控件。在再次搜索网页后,我终于找到了设计师为这个特定项目失败的原因。答案是项目是64位而Visual Studio仍然没有64位版本,它仍然是32位。因此,设计人员无法在64位应用程序或类库中加载控件。阅读微软关于此的文章。 Visual Studio网站上有一篇文章,但它被删除了。请参阅Visual Studio支持论坛中的答案。
我最近遇到了同样的问题。由于这个(本网站和互联网上的任何其他答案)实际上帮助了我,我找到了解决问题的方法。 只需清理文件并重建解决方案即可。就如此容易。
您不必手动插入用户控件。我有同样的情况,有一个原因。
在我的情况下,它失败了,因为EXE程序集通过使用CLR支持类型/clr
编译为“混合模式”。通过设置类型/clr:pure
将其更改为“仅管理”后,它可以正常工作。
有关详细信息,请参阅my answer here at SO。
在使用源代码控制中的前一个工作副本进行少量更改的大型自定义控件解决此问题数小时之后,我将所有代码复制到新的控件名称和文件中,并且一切正常。
这是为了识别代码的问题行,因为调试器不会合作。复制的控件(以及大量支持代码和模块)工作正常。
所以这些是修复原始代码的非常简单的步骤
第4步对您来说可能是可选的,但如果您有源代码控制,并且它是库中的一个,您可能希望这样做。
这使得控件重新回到我所有无效的表格上(据我所知)。似乎VS中的问题以某种方式记得它不喜欢它?
希望这会有所帮助,我希望下次当我忘记修复时,我会发现此消息:)
附:清理,重建和/或重新运行解决方案是这个问题的旧版本,但这次它只是一个整体(DLL)类中的一个自定义控件。希望这可以帮助。
切换到AnyCPU并重建项目。 Visual Studio存在64位控件的问题。
如果存在具有该类型的留置属性,请检入form.designer文件。它发生在我身上好几次。删除该行并重建项目后,一切都开始工作了。
对我来说,在添加userControl之后,我首先重建应用程序,然后通过转到projects =>刷新项目工具箱项来刷新工具箱上的项目
在我的例子中,它有助于手动将创建的用户控件的头文件包含在要使用这些控件的Form的顶部。