【问题标题】:GUI Preview Sizes Issue When Developing WinForm App in Surface Pro 3在 Surface Pro 3 中开发 WinForm 应用程序时的 GUI 预览大小问题
【发布时间】:2015-02-18 10:50:06
【问题描述】:

我开发 WinForm 应用程序已有很长时间了。我最近刚买了一台 Surface Pro 3 作为我的新开发电脑。不幸的是,我注意到 GUI 编辑器存在问题。某些控件的大小与 GUI 编辑器中显示的内容以及实际运行的应用程序中显示的内容不匹配。例如,当我运行应用程序时,我的面板的大小与 GUI 编辑器中的外观不符。它们通常会增加维度。我不确定这是 VS 问题还是与使用 Surface Pro 3 有特殊关系?

为了说明我的意思,请考虑以下屏幕截图。请注意 GUI 编辑器中菜单栏的大小与实际应用程序中的差异。

【问题讨论】:

  • 这通常发生在高 DPI 屏幕上。检查您的 DPI 设置。根据我的经验,除了“正常 100%”之外的任何东西都会导致这样的故障。

标签: c# winforms user-interface visual-studio-2013


【解决方案1】:

如果您想阻止您的应用更改大小,您可以使其独立于 DPI 设置。您的应用程序将像素完美,但在高分辨率屏幕上可能太小。

您只需更改主窗体的AutoScaleMode 属性并将其设置为None

【讨论】:

  • 这对调整大小/对接/锚定有什么影响?
  • 我认为这行不通。 GUI 编辑器和正在运行的应用程序之间的大小仍然存在明显变化。界面i.imgur.com/fYCuPnL.png正在运行i.imgur.com/8xWvDje.png
  • 它在某些情况下确实有效。检查任何可能与此修复一致的处理自动调整大小、父窗口等的代码。
【解决方案2】:

我知道这是一个旧线程,但我遇到了同样的问题...我找到了一个您可能会觉得有用的解决方法...

在尝试了一些事情之后,我发现 Windows 10 正在尝试在 Surface Pro 上的 Windows 10 下对表单进行一些“智能”调整大小(我使用的是 Surface Pro 4)......我不确定它是否是 win10、高分辨率或 Surface Pro 问题....不管是什么,它都弄乱了我的控件大小、位置、锚点和分辨率。

我发现如果我在设计器中记下我的表单的预期大小,然后在我的 Form_Load 事件结束时在代码中手动设置它,它将覆盖这个意外行为,我最终得到了我最初的预期表单大小和控件位置,我还需要在父/屏幕中重新居中表单以获得所需的结果(当然只有当这是表单的预期启动位置时)

对我有用的代码(在 Form_Load 事件结束时)是......

this.height = 800;
this.width = 600;
this.CenterToScreen();

我希望这对某人有所帮助,我有一段时间正在拔头发!

【讨论】:

    【解决方案3】:

    自从我发布这个问题以来已经有一段时间了,我有点忘记了。我想我应该将我最近的发现分享给那些将陷入同样困境的人。

    我了解到 GUI 编辑器和实际运行的应用程序之间的差异是因为我的 Surface Pro 3 的超高 DPI 缩放比例。与通常的 96 相比,Visual Studio 自动以 216 DPI(225% 显示缩放比例)运行普通电脑的DPI(100%显示缩放)。我当时的解决方法是通过反复试验简单地调整我的控件,并将它们中的大部分锚定在 GUI 编辑器和正在运行的应用程序之间。最终,因为我转移到具有普通屏幕的普通桌面来进行常规软件开发,所以问题变得不那么重要了。展望未来,我最近偶然发现了 Microsoft documentation 关于 Windows 窗体中的自动缩放。它解释了 Windows 窗体的多个 DPI 缩放问题。它还包括有关 Visual Studio 的 DPI 缩放问题的这一点:

    由于显示 DPI 的巨大差异,尤其是在现代二合一设备中,最新版本的 .NET Framework 和 Visual Studio 仍然会发生这种情况。要在使用不同 DPI 显示的团队中解决此问题,请确保 Visual Studio 始终以非 DPI 感知模式启动,以便 Windows 窗体设计器始终基于 96 DPI 进行布局计算。

    他们建议的解决方案是添加或导入禁用 Visual Studio 的高 DPI 感知的注册表值:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe]
    "dpiAwareness"=dword:00000000
    

    我试过了,它确实有效。我希望它也能帮助你。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多