【发布时间】:2015-02-20 15:30:47
【问题描述】:
我们在 Winforms 中内置了一个复杂的遗留表单,它最近开始出现严重的行为不端,并且随着时间的推移变得越来越糟糕。仅在设计视图中打开表单会改变表单的布局,有时会以较小的方式(将控件的大小调整为小一个像素),有时会以较大的方式(将组件移动到 X 位置) -6582)。由于此表单的大小和生成的 .Designer.cs 引用差异的性质,通常几乎无法确定对表单所做的更改是否是您实际想要的更改。
根据我在其他问题中找到的一些建议:
- visual studio 2005 designer moves controls and resizes Form
- Visual Studio keeps resizing my form without me telling it to, help!
- Controls moving in vs2008 design mode on build
AutoScaleMode 设置为 None。我简单地尝试了各种显示器分辨率,但无济于事。最终我们决定不再依赖锚点,而是使用TableLayoutPanels 和 Dock 属性的组合。这就是麻烦真正开始的时候......
在重新设计此表单上的一个毛茸茸的选项卡后,当我尝试保存 Visual Studio 2-3 分钟并报告“无法加载文件或组装 'MyProject, Verion=X.X.X.X, Culture=neutral, PublicKeyToken= null' 或其依赖项之一。系统找不到指定的文件”(如下所示:Visual Studio 2013 Can't save, build, or rebuild solution)。每当表单尝试保存时,都会发生这种情况。遵循已接受答案中的建议后,我能够再次保存/构建。
尝试稍后运行会导致构建时间非常长并且表单完全为空(如下所示:All controls on a form are invisible 和 https://stackoverflow.com/a/5524183/1015495)。 所有对 Controls.Add 的调用已从设计器中删除(我认为这种巨大的变化是导致构建时间长的原因)。我将表单恢复到以前的版本并开始重新创建我的更改。 现在,更阴险的是,某些控件已将其所有 子控件删除。
在这种形式下工作充其量只是浪费时间,最坏的情况是不可行。我在网上找到的解决方案基本上可以归结为“手动重新创建表单”或“不要使用 Winforms”。不幸的是,这些都不是现在的选择。在我们能够提出适当的解决方案之前,我们如何才能减轻我们在中期未来使用此表格时遇到的问题?
【问题讨论】:
-
您是否使用任何第三方控件?其中一个可能没有与设计师正确交互。此外,您是否考虑过将表单拆分为单独的 UserControl 以划分复杂性?如果不出意外,这将减少在需要时重建事物所需的时间。更好的是,如果其中一个 UserControl 开始出现异常行为,那么您将把问题范围缩小到一组较小的控件(希望这些控件更易于分析)。
-
我不知道任何第 3 方控件,并且快速扫描文档大纲没有显示任何内容。我们确实有一些 用户控件在使用中(还不够,但你有它)。实际上将其分解为更多用户控件与重新创建整个事物一样糟糕,但可能会分块进行。最终我们只想摆脱 Winforms。
-
您可以尝试启动 VS 的第二个实例,然后附加到正在运行的实例,并在抛出异常时让它在调试器中中断(适用于所有异常类型)。这可能会捕获不能很好地处理设计时的代码。
-
表单上有子类控件吗?有些错误只是在一段时间后才会出现..
-
@TaW 澄清一下,您的意思是 具有 子类的控件?不是是子类的控件吗?
标签: c# winforms visual-studio-2012 windows-forms-designer