Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Winforms designer行为不端,基本上已损坏_C#_Winforms_Visual Studio 2012_Windows Forms Designer - Fatal编程技术网

C# Winforms designer行为不端,基本上已损坏

C# Winforms designer行为不端,基本上已损坏,c#,winforms,visual-studio-2012,windows-forms-designer,C#,Winforms,Visual Studio 2012,Windows Forms Designer,我们在Winforms中构建了一个复杂的遗留表单,该表单最近开始出现严重的错误行为,并且随着时间的推移,它变得越来越糟糕。只需在设计视图中打开表单,就会改变表单的布局,有时会以较小的方式(将控件调整为更小的像素)有时会以较大的方式(将组件移动到X位置-6582)。由于此表单的大小和生成的.Designer.cs的性质,参考diff通常无法确定对表单所做的更改是否是您实际想要的更改 根据我在其他问题中发现的一些建议: AutoScaleMode设置为None。我用不同的显示器分辨率做了短

我们在Winforms中构建了一个复杂的遗留表单,该表单最近开始出现严重的错误行为,并且随着时间的推移,它变得越来越糟糕。只需在设计视图中打开表单,就会改变表单的布局,有时会以较小的方式(将控件调整为更小的像素)有时会以较大的方式(将组件移动到X位置-6582)。由于此表单的大小和生成的.Designer.cs的性质,参考diff通常无法确定对表单所做的更改是否是您实际想要的更改

根据我在其他问题中发现的一些建议:

AutoScaleMode
设置为
None
。我用不同的显示器分辨率做了短暂的实验,但没有成功。最终,我们决定不再依赖锚定,而是使用
TableLayoutPanel
s和Dock属性的组合。这就是问题真正开始的时候

在重新设计了这个表单上的一个较复杂的选项卡之后,当我试图保存Visual Studio时,我旋转了2-3分钟,并报告“无法加载文件或关联”MyProject、Verion=X.X.X.X、Culture=neutral、PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件(如下所示:)。每当表单试图保存时,就会发生这种情况。在遵循已接受答案中的建议后,我能够再次保存/构建

尝试在不久之后运行会导致非常非常长的构建时间和一个完全空的表单(如这里所示:and)。对
Controls.Add
的所有调用都已从设计器中删除(我认为这一巨大的更改是导致构建时间过长的原因)。我将表单恢复到以前的版本,并开始重新创建更改。现在,更阴险的是,某些控制组已经将他们所有的孩子都移除了


在这种形式下工作,充其量是一种时间链接,最坏的情况下是不可行的。我在网上找到的解决方案基本上可以归结为“手动重新创建表单”或“不使用Winforms”。不幸的是,现在这两个都不是一个选择。在我们能够找到一个合适的解决方案之前,我们如何在中期内缓解这种形式的问题

我目前正在处理一个几乎相同的问题,我的问题似乎是Visual Studio 2013中的一个bug,它与用户控件上的“linkLabel”控件有关,该控件位于主窗体上选项卡控件的一个选项卡上

我在父窗体上有其他linkLabel控件,这些控件没有引起任何问题。奇怪的是,并不是所有的标签都乱七八糟,只有一些标签乱七八糟。我只能得出结论,它通过了部分布局重组,点击了用户控件,然后爆炸,未能正确完成布局。我附加了VisualStudio的第二个版本来尝试捕获异常,并在调试器中看到了各种状态行,但没有看到抛出任何异常。我不太熟悉这样做,所以我可能做错了

我可以在添加用户控件之后,但在VisualStudio在设计器中打开表单并自动重新生成设计器代码之前,将代码还原回。此时,在设计器中打开表单总是会导致完全相同的设计失败。只要我不再在设计器中打开代码,一切都会在运行时正常工作


如果我删除了对带有链接标签的自定义用户控件的任何引用,那么设计器也将顺利打开。起初我假设我自己的代码中有一个错误,所以我开始注释一些东西,但即使只是拖拉了一些基本元素,它仍然在发生。于是我开始移除元素,然后一次一个地添加回去,看看是什么破坏了它。在我的例子中,这原来是“linkLabel”控件。我不确定是否还有其他控件可以做到这一点。现在我只打算重新编写代码,不在用户控件上使用链接标签,看看效果如何。

您是否使用任何第三方控件?其中一个可能没有与设计师正确交互。另外,您是否考虑过将表单拆分为单独的用户控件以划分复杂性?如果没有别的,这将减少在需要时重建所需的时间。更好的是,若其中一个UserControls开始出现问题,那个么您将把问题缩小到更小的一组控件(希望更容易分析)。我不知道有任何第三方控件,快速扫描文档大纲并没有显示任何内容。我们确实有一些用户控件在使用中(还不够,但你已经有了)。实际上,将它分解成更多的用户控件与重新创建整个东西一样糟糕,但可能是分块进行的。最终,我们只想摆脱Winforms。您可以尝试启动VS的第二个实例,然后连接到正在运行的实例,并在引发异常时让它在调试器中中断(对于所有异常类型)。这可能会捕获到不能很好地处理设计时的代码。表单上是否有子类控件?有些错误是过了一段时间才暴露出来的。@TaW只是想澄清一下,你是说有子类的控件?不是属于子类的控件?断开的选项卡和保存链接标签的组件之间是否存在任何关系?这听起来很有希望,但是这个表单没有任何链接标签,所以我试图找出罪魁祸首。没有代码关系。在我的例子中,我从选项卡中删除了所有用户控件。我在存储库中创建了一个提交点,这样我就可以很快回到这个干净的状态。然后,我创建了一个新的空用户控件。我会将这个新的用户控件添加到选项卡中,关闭设计器编辑器并