繁体   English   中英

无法在表单上放置用户控件

[英]Cannot Place User Control on Form

我使用VS2010创建了一个C#WinForms应用程序。 我是创建用户控件的新手,所以我创建了一个新的用户控件(作为同一项目的一部分)。

重建项目时,新控件将显示在工具箱中。 当我将控件从工具箱拖到窗体上时,我收到以下错误。

无法加载工具箱项“TagGroup”。 它将从工具箱中删除。

这是我创建用户控件的唯一时间。 我在网上搜索过,但我发现的大多数答案似乎与将控件放在一个单独的程序集中有关。 (请注意,我发现了很多与我遇到的问题相同的问题。)

任何人都可以建议我下一步要看哪里?

我的应用程序需要是64位。 为了在设计器中使用自定义用户控件,我刚刚在我的解决方案中添加了一个新项目。 这个新项目使用“AnyCPU”设置并包含我的所有用户控件。

我的解决方案包含以下项目:

  • MyApp是我的主要项目(Windows窗体应用程序),以64位编译并引用我的第二个项目
  • MyApp.UI.UserControls (类库)是为“ 任何CPU ”编译的,包含我的所有用户控件

像魅力一样工作,很干净


顺便说一下,有一篇关于该问题的Microsoft支持文章

  • 操作:您尝试在Microsoft Visual Studio集成开发环境(IDE)中使用64位组件。
  • 错误原因:此行为是设计使然。 Visual Studio是一个32位进程,因此只能执行32位模块。 虽然Visual Studio允许您添加对64位程序集的引用,但它实际上无法JIT将其编译为64位并在进程中执行它。
  • 解析度:
    1. 使用“AnyCPU”设置重建装配。 这将允许组件在32位进程(例如Visual Studio)或64位进程中运行。
    2. 添加程序集作为参考,并在运行时动态加载控件。 虽然您仍然无法在Visual Studio中的任何设计器中使用该控件,但您仍然可以编写实例化控件所需的代码并相应地设置它的属性。

资料来源: http //support.microsoft.com/kb/963017

我终于想出了这一个。

我正在使用的项目使用两个类库程序集。 虽然这些与我正在讨论的控件无关,但我查看并看到两个库在Properties | Build选项卡中将Platform Target设置为“Any CPU”。

另一方面,我的应用程序将此设置设置为“x64”。 通过将我的应用程序的设置更改为“任何CPU”,我现在可以将我的用户控件放在我的表单上。

去搞清楚...

我也有这个问题,但答案不适合我。 我的项目有一些问题,它只能分别针对x86和x64。 换句话说,我不能使用AnyCPU配置(因为我为每个配置引用了不同的库,因为这些库不适合AnyCPU)。

我想出的解决方案是:当我需要使用表单设计器时,我将设置更改为x86。 完成工作,然后重新设置为x64并进行测试。 问题只发生在设计人员身上,但解决方案构建并运行良好。

我在VS2015中遇到了这个问题,解决方案很简单。

我通过从表单中剪切和粘贴一些现有控件来创建用户控件(目的是将它们分组到自定义控件中)。 自定义控件没问题(没有编译错误),但是从现有表单中删除控件意味着应用程序无法编译。 当然,无法添加新控件意味着我无法使用引用自定义控件的代码更新引用先前控件的代码。

我所做的就是破解和删减(注释掉,创建临时控件等),以便整个应用程序可以编译。 编译后我发现我可以将自定义控件拖到窗体上(没有提示此问题的错误)。 然后我不得不unhack和unslash,以便代码正确引用新的自定义控件。

同样的问题在这里 我猜这与安装在x64操作系统上的VS2010仍然是一个32位程序的事实有关。

可能想要尝试的替代解决方案是打开TheFormThisUserControlIsSupposedToBeAddedTo.Designer.cs并使用代码添加用户控件。 基本上,你正在做设计师应该做的肮脏的工作。

它并不像听起来那么困难,尤其是 考虑到该文件中可能已有大量示例代码(例如,您使用Designer添加的按钮)。 唯一困难的部分是确定表格中的正确坐标以放置控件。

最终结果是您无法在Desinger中看到用户控件,但它们会在调试/运行时添加。

我也遇到过这个问题,但原因不同了。 在我的例子中,组件(表单)构造函数或Load事件调用了其他地方的方法,该方法使用反射来查找实现某个接口的所有类。

虽然这在运行时工作正常,但它在设计时生成了上述异常。 (键入初始化异常,并将类型加载异常作为内部异常)。

凌晨3:36,一小时的困惑,疲惫的故障排除再次轻松解决,第二天就有了新的头脑!
我在控件的文件名中修复了一个简单的拼写错误,所以它现在匹配了UserControl名称,清理并重新构建了Bobs你怪异的叔叔的猫。 :]

GO项目属性然后'Build'选项卡并检查'Target Platform'是'AnyCPU'。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM