【问题标题】:visual studio 2005 designer moves controls and resizes Formvisual studio 2005 设计器移动控件并调整窗体大小
【发布时间】:2018-03-11 13:41:49
【问题描述】:

当我在 Visual Studio 2005 (c#) 中打开一个表单时,设计器会自动调整表单的大小并移动/调整控件的大小,而无需触及设计器。源文件已更改,当我关闭设计器时,系统会要求我保存 *.cs 文件。 我试图研究视觉工作室选项但没有任何成功。 有任何想法吗? 视觉工作室设置或什么? 谢谢, 塔尔

【问题讨论】:

    标签: c# visual-studio designer


    【解决方案1】:

    这是你应该忍受的。即使在 VS2008 中,这种事情也会时有发生。它主要取决于表单内容(控件、位置等),VS 中没有禁用此类行为的选项。

    当您在设计器中打开表单时,vs 运行时会从后面的代码重建视觉外观。有时它会在这一刻做出改变。此外,当您只是向表单添加一个控件时,设计器会完全重建代码隐藏和资源文件。这是众所周知的问题,似乎 MS 不会修复它,因为它们朝着 WPF 方向发展。

    有几点可以简化你的生活:

    1. 移至 VS2008,设计器更加一致,但仍然在 .designer.cs 文件中随机播放控件
    2. 将您的代码放在其中一个源存储库中,因此如果您不小心保存了此类表单,您可以从存储库中恢复它。

    【讨论】:

    • 感谢仲裁者。 -嗯,移到 2008 年与我的项目无关(此时涉及的代码太多)。
    • VS2005->2008迁移完全没有问题。
    • 这个在VS2010还是有问题
    • 是的,我在 vs2010 中遇到了问题 - 但正如 RyanTM 建议的那样,我的麻烦消失了,因为我用停靠交换了锚定 ....
    【解决方案2】:

    我找到了解决办法。

    不确定后面会发生什么,但我更改了显示属性。它工作正常。 这是顺序:显示属性->设置选项卡->高级。 在高级对话框中,我将“DPI 设置”从大 (120dpi) 更改为普通 (96 dpi)

    【讨论】:

    • 你的屏幕 DPI 会影响 IDE 设计器,这太糟糕了。很抱歉听到这个消息。 :(
    • 在 Windows 造成的众多恐怖中,“DPI 设置”是最糟糕的之一。与我所见过的几乎所有其他设置相比,此设置会导致更多应用程序出现更多问题。
    【解决方案3】:

    我今天大部分时间都在研究这个问题,并发现了一些有趣的事情:问题的主要来源似乎是依赖于锚定。如果我使用停靠来定位我的控件,而不是锚定,我的问题似乎就消失了。我发现了 2003 年的几篇博文(!),其中详细介绍了如何使用停靠而不是锚定,并解释了锚定如何破坏 Windows 窗体设计器。看来这个问题可能已经超过 7 年了!

    这里是帖子:

    【讨论】:

    • 我的表单中的控件一直被设计者歪曲 - 这个问题在 VS 2012 中仍然存在。切换到停靠似乎已经停止了它。
    • 呃,在 VS2013 中仍然是一个问题,感谢它确实有帮助。
    【解决方案4】:

    这是由于AutoScaleMode-property。您的表单设计的 DPI 或字体设置可能与您现在在 Windows 显示设置中的设置不同。 AutoScaleMode-property 有 4 个不同的可能值:DpiFontInheritNone。在DpiFont 模式下,您的表单和控件将根据窗口显示设置自动调整大小。

    因此,在您的所有表单和控件中将AutoScaleMode-property 设置为None,它们将不再自动调整大小。尝试设计您的表单,以便在每个控件中留出足够的空间,以便即使将文本大小设置为 125% 也能适应文本。

    【讨论】:

    • 似乎已经为我完成了。我必须编辑 *Form.Designer.cs 来更改 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; , 并删除 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); (这两行都在 .Designer.cs 文件中)
    【解决方案5】:

    将表单的最小和最大尺寸设置为当前尺寸对我来说是一个很好的解决方法。这阻止了 VS 调整它的大小。

    【讨论】:

      【解决方案6】:

      在复杂的 TabControl 中锚定在顶部、左侧和右侧的控件也存在同样的问题。每次我打开表单时,Visual Studio 表单设计器都会增加所有嵌套控件的宽度。

      感谢this post,我找到了一个简单的解决方法。我只是为每个选项卡添加了一个面板,并将它们的停靠属性设置为填充。选项卡中的所有现有控件都移到了这些面板中。即使控件被锚定在顶部、左侧和右侧,这也有效。

      至少适用于 Visual Studio 2013 和 2015。

      【讨论】:

        【解决方案7】:

        我也有这个问题。每次我打开设计器时,每个带有“right”锚点的框都会向左移动大约 20 像素。此外,每个带有“左”锚点的框的底部都在表单之外大约 200 像素。

        这个表单有很多控件,不应该在较小的显示器上收缩,所以它被设置为自动滚动,表单本身在设计器中小于显示的最小尺寸(历史上......)。我只是将尺寸设置为最小尺寸,这样设计器中就不会出现滚动条,并且锚可以按预期工作而不会搞砸位置。

        我从 ryantm 的回答中阅读了第一篇文章,这使我找到了解决方案。显然它与.Net 执行事件的顺序有关,例如设置表单的大小。

        【讨论】:

          【解决方案8】:

          我有一个简单的表单,上面的控件很少,一旦在 VS2013 设计器中打开表单,底部的 OK 和 Cancel 就会向上移动。在 VS2015 中观察到了相同的行为。

          这里接受的 DPI 答案并没有解决我的问题,表单/填充/边距的大小也没有任何问题。

          删除已移动的控件并将它们重新添加到表单中解决了我的问题,正如 ptutt 在这里所建议的那样: Visual Studio designer moving controls and adding grid columns when form is opened

          虽然我很欣赏 ryantum 的建议和使用停靠 [with panel] 的链接,正如上面的链接中提到的 Roland 的博客文章 https://weblogs.asp.net/rweigelt/28984,但我宁愿把它去掉/添加回来。

          【讨论】:

            【解决方案9】:

            我发现从格式菜单锁定控件是一种简单而有效的解决方案。 VS2013

            【讨论】:

              【解决方案10】:

              我在 VS 2015 中遇到了这个问题。 我使用了带有控件的停靠面板,这些控件像他们的孩子一样意外移动。 默认情况下,控件将向左对齐,但您可以更改方向。 我的按钮停止了移动。

              【讨论】:

                猜你喜欢
                • 2013-08-25
                • 2012-05-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-04-30
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多