System.ComponentModel.Design.ExceptionCollection

问题描述 投票:0回答:7

我正在使用位于 CodePlex 上的功能区控件,并按照位于 here 的教程进行操作。一旦我在设计器中添加了引用和正确的代码,当我尝试查看表单时,我会收到此错误:

抛出了“System.ComponentModel.Design.ExceptionCollection”类型的异常

我不知道我做错了什么。有人使用过此控件并知道如何解决此问题吗?

c#-4.0 ribbon
7个回答
34
投票

有趣;我刚刚在我自己的表格中遇到了同样的问题;这就是我找到您的相关且最近的问题的方式。

我是这样解决的:

  1. 打开 Visual Studio 的两个实例。在两者中打开相同的项目。
  2. 在一个实例中,转到“调试”->“异常”并启用所有“抛出”选项以在第一次出现异常时停止。这将在生成异常时停止调试器。
  3. 在同一实例中,选择“调试”->“附加到进程”,选择“devenv.exe”。
  4. 在另一个实例中,打开表单导致异常
  5. 如果幸运的话,第一个实例应该停止在产生更相关异常的地方。

就我而言,事实证明这是我应该适应的东西:

if (!DesignMode)
{
  // Do something that should only happen at runtime
}

不要忘记稍后关闭所有这些“抛出”选项。


5
投票

我的解决方法是:

  1. 右键单击表单并“查看代码”
  2. 保持编辑器中加载的代码,然后尝试再次查看设计器。

这感觉非常不正常,我无法确认这是否是我的代码的问题(因为我正在开发一个全新的代码库)或者是否是 VS2012 的错误。如果我发现了,我会回来报告。


4
投票

由于pilotcam概述的解决方案对我不起作用,我采取了不同的方法

  1. 对文件进行 SVN 提交。
  2. 打开在源视图中显示错误的表单的“*.designer.cs”文件。
  3. 删除较大的表单元素声明块。
  4. 使用 ReSharper 修复所有编译错误(即确保侧面指示器上不再出现红色)。
  5. 保存文件。无需编译。
  6. 打开窗体的 Windows 窗体设计器。
  7. 如果错误仍然出现,请执行 SVN 恢复以返回到初始状态。
  8. 重复步骤 2 至 7,直到错误不再出现。
  9. 现在您已经圈出了导致错误的错误子控件。
  10. 使用您删除的少量控件重复步骤 2 至 7,直到只剩下一个控件。

在我的例子中,它是选项卡控件内的组控件内的用户控件,因此我首先识别选项卡控件,然后是组控件,然后是用户控件。

您可以将用户控件隔离在新表单中以进一步调查。就我而言,这相当容易;我对控件内的大多数函数进行了设计模式检查,以确保仅当控件不处于设计模式时才执行代码。

这解决了我的错误。


2
投票

我遇到了同样的问题,以上答案都没有解决问题。

最后,清空“bin”文件夹并重建对我有用。


0
投票

让我再添加两种可能发生此类异常的情况,以及当控件尝试执行设计模式下不允许的操作时:

  1. 当无法编译用户控件时。
  2. 当设计器代码包含多个相似(或相同)的行并初始化相同的控件或属性时,这种情况很容易在合并时发生。

所有这些情况都会产生相同的极其有意义的错误消息,在这种情况下,Visual Studio 的两次调试将无济于事,所以我最终将我的设计器代码一分为二。


0
投票
[ReadOnly(true)]

[Browsable(false)]

以上所有属性都对我有用


0
投票

Pilotcam 出色的故障排除想法不幸的是对我不起作用。

(我的建议源于我在 VS2017 中的一次特殊经历,以 vb.net 4.6.1 形式。)

确保 .Designer.vb 文件中的命名空间尽可能具体。甚至考虑从项目名称开始。编译器和编辑器语法检查器可能会满意地解析您的命名空间,但设计视图可能不会。特别注意控件的实例化行的命名空间(底部的声明行似乎要求不高):

Me.ddlAuthorising_Officer = New ProjectName.FullNamespace.FlatComboBox()

我强烈建议在尝试解决此问题之前确保项目能够编译。一旦解决了其他(不相关的)编译错误,编辑器更有可能帮助即时修复命名空间问题。

请记住这个问题,仅仅因为编译器对 .Designer.* 文件的语法满意,设计视图编辑器很可能不满意。

© www.soinside.com 2019 - 2024. All rights reserved.