我在另一个问题上交叉发布了此评论,但由于这与此处相关,因此再次出现。
当用户控件无法加载到 Visual Studio 设计器中时,您需要执行此操作。这些指令适用于 vb.net 项目,但 c# 应该类似。此外,在执行此操作之前,请关闭所有打开的窗口(或至少关闭您正在处理的控件的源文件和设计器文件。)
最后一件事。您应该做的第一件事是确保重新启动 Visual Studio 不能解决问题。如果没有,您可以尝试以下步骤。这些说明假定错误的用户控件位于 Visual Studio 的控件库项目中。如果不是,您应该能够稍微调整方向以使其工作,但当控件位于其自己的项目中时,它会容易得多。
请执行下列操作:
- 使控件库成为您的启动项目。
- 打开控件库项目的属性,然后单击调试选项卡。
- 在 Start Action 下单击 Start external program 选项并浏览到 Visual Studio 可执行文件。
注意:这意味着当您运行解决方案时,它将启动另一个 Visual Studio 实例,而不是实际运行您的解决方案。Visual Studion 的第一个实例 (INSTANCE_1) 将在您运行时“托管”第二个 Visual Studio 实例 (INSTANCE_2)。
- 运行您的解决方案。INSTANCE_2 将加载。
- 切换回 INSTANCE_1。
- 在 INSTANCE_1 中按 CTRL-ALT-E。这将打开例外对话框。选中 Common Language Runtime Exceptions 旁边的 THROWN 列复选框。
注意:这将确保 INSTANCE_1 将在任何运行时错误时中断,即使它在 try 块中被击中。
- 切换到 INSTANCE_2。在解决方案资源管理器中双击打开错误用户控件。
您应该会发现 INSTANCE_1 OF Visual Studio 应该在导致设计器不加载控件的代码行处停止。修复代码(这通常意味着在引用对象属性之前测试 IsNot Nothing ......但可能意味着其他事情。)
此外,有时我发现控件将在 INSTANCE_2 中加载,而不是在 INSTANCE_1 中出现错误。在这种情况下,只需停止调试...关闭 INSTANCE_2。保存/重新启动 INSTANCE_1,您的问题通常会消失。
教训是这样的。用户控件必须能够加载/引用所有对象及其成员,以便将其加载到设计器中。因此,对于将被放置到其他容器上的用户控件,我通常会设计事件来通知父控件,而不是尝试将对象推送到子控件中。
希望这有助于将来参考这个老问题。
赛斯