Windows窗体设计器破坏了表单布局

3
今天早上,我在Visual Studio的Windows Forms设计器中遇到了一个奇怪的问题。我有一个表单,一个月来一直没有改变过。它在应用程序中看起来像这样:Screenshot of how the form should look like。现在从今天开始(我昨天在设计器中打开表单时没有出现问题),设计器中的表单看起来像这样:Screenshot of how the form looks in the Windows Forms Designer。查看差异后,每个控件(或几乎每个控件-标签未受影响,但可能与AutoSize有关)都有311像素的宽度。在设计器搞砸文件后,类似以下的行在整个文件中很常见:
this.panel1.Size = new System.Drawing.Size(311, 24);

无论这个值来自哪里。此外,一个标签有有趣的文本"潐瑲⼠倠獯瑩潩㩮攀瑵慲ⱬ"(在原始字节中没有更多意义)。

当我不在设计器中打开表单时,什么坏事都不会发生,即使文件未被修改,项目也会构建,并且在运行程序时看起来很好。但是打开设计器会触发上述对设计器生成的代码的更改,并且这些更改在编译时持久存在(显然)。

在同事的机器上根本不会发生这种情况(但他无法打开数据集而不会崩溃VS,因此可能两个设置都有点奇怪...)。

我真的想知道这里发生了什么。任何想法?

ETA:一旦它进入重新调整大小的暴走状态,我就无法在设计器中更改控件的大小。调整大小只会导致某些视觉伪像,就好像控件已经被调整大小,但在检查时仍为311像素宽度。

ETA 2:奇怪的是:打开设计器(导致损坏,到目前为止还不错),然后使用AnkhSVN进入待处理更改,并将所有更改恢复到文件,也会恢复损坏。即使在设计器中,表单看起来也像应该的那样。直到我再次关闭并重新打开它。


是否涉及任何源代码控制系统?如果有,是哪一个? - Fredrik Mörk
我们这里使用Subversion。但是.Designer.cs文件只有在我打开设计师时才会发生更改。该文件本身在SVN中已经有一个月没有更改了。 - Joey
4
我无法为您提供解决方案,但我自己也经常遇到过来自VS的奇怪和无法解释的行为,并想要表示同情。非常令人沮丧!祝你好运…… - Tom Juergens
谢谢,Tom :-). 嗯,代码编辑器本身是我非常喜欢的东西,但设计师有时会倾向于不稳定 :/ - Joey
那段文本对我来说有点像阿拉伯语;) - RCIX
那样它就不会左对齐了 :-) - Joey
5个回答

4
我找到了罪魁祸首。最近我安装了RockScroll。虽然我不能直接将这种行为与RockScroll联系起来,但我注意到一些表单上的滚动条替换被绘制在它们上面。并且该表单上的控件会无缘无故地改变大小。
卸载RockScroll后问题得到解决。不管怎样,感谢所有的帮助。

我刚遇到了类似的问题,RockScroll影响了我的窗体对象的重绘。我发现当我在调试后查看窗体时,问题会浮出水面。我的窗体上的任何控件都不再可见。这并不是我能容忍的事情,所以我也卸载了RockScroll。 - Span

1

你尝试过清理你的项目吗?(我害怕这不会解决任何问题,但这是一个值得尝试的简单步骤)


另外,你能清理一下你的Visual Studio缓存吗?在类似的情况下,这对我来说已经有效多次了。

以下是一些关于VS缓存问题的链接:1 2。如果你发现其他有用的信息,请随时编辑我的帖子。


清理项目不起作用,不幸的是。我在哪里可以找到清理VS缓存的选项?我刚刚查看了选项,但没有找到任何东西。 - Joey
没有这样的选项。你需要关闭VS,并手动删除文件夹。我正在更新我的帖子,以添加一些关于如何做到这一点的指导方针。 - Brann
这里也没有帮助 :-(。我认为作为一个临时解决方案,我将只是放弃那个可怕的表单。如果需要进行任何更改,那么我的同事可以进行修改。 - Joey
你尝试过创建一个新的空白表单,将设计师代码复制到其中,重新构建,然后删除旧表单/将新表单重命名为旧名称吗?当然,这样会失去此表单的签入历史记录 :( - Brann
我想我会稍后尝试这样激烈的措施。此刻,该表单不需要任何更改,问题本身仅限于我的环境; 其他人可以正常编辑它,这甚至更奇怪。 - Joey
无论如何,因为这些是到目前为止唯一明智的建议。 - Joey

0

在设计师中使用“使宽度相同”工具,可以通过一次点击完成。

根据我的经验,在构建过程中如果 Visual Studio 出现卡顿,随机点击屏幕上的任意位置来测试 VS 是否完成当前任务是相当常见的。

这只是一个想法。


每次打开设计器时都会发生这种情况。我已经尝试了大部分的时间,持续了2个半小时。此外,数字311甚至没有出现在原始设计器生成的代码中,因此像“使其相同”这样的东西(即使我没有点击它)可能很难将每个控件调整为以前没有的宽度。 - Joey

0

也许你最近安装了另一个语言包(可能是韩语)。


不,我没有。而且我也不会期望语言包会导致随机损坏(我怀疑那些中文字符[不是韩文]根本没有任何意义)。 - Joey

0
你在表单的构造函数或OnPaint方法中手动布局或锚定吗?我曾经遇到过类似的问题,因为我试图手动修改一些元素的位置,而设计师在渲染时传递了一个无效的ClientRectangle(或其他什么东西)。

在构造函数/窗体加载事件中只是进行了一些绑定源的初始化。类本身总共有35行代码,其中没有任何与窗体布局相关的内容 :/ - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接