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

时间:2011-01-26 00:31:01

标签: c# .net winforms user-controls

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

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

  

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

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

有人可以建议我下一步要看哪儿吗?

7 个答案:

答案 0 :(得分:34)

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

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

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

像魅力一样工作,而且很干净


顺便说一下,关于这个问题有一个Microsoft support article

  • 操作:您尝试在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

答案 1 :(得分:33)

我终于想出了这个。

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

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

去图......

答案 2 :(得分:6)

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

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

答案 3 :(得分:2)

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

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

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

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

答案 4 :(得分:0)

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

虽然它在运行时工作正常,但它在设计时生成了上述异常。 (键入Initialization exception以Type Load Exception作为内部异常)。

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

GO项目属性然后' Build'选项卡并检查“目标平台”'是' AnyCPU'。