Windows 窗体 DPI 缩放

问题描述 投票:0回答:2

enter image description here

我的应用程序在 100% DPI 设置下看起来不错,但是当用户选择不同(125% 或 150%)时,单词不适合容器。我尝试使用在这里找到的解决方案来解决此问题:检测 Windows 字体大小(100%、125%、150%),即:

this.AutoScaleMode = AutoScaleMode.Dpi;

它修复了 150% 设置(使其有点模糊,但没关系),不幸的是,它没有对 125% 进行同样的设置,而 125% 是在应用程序打算运行的 PC 上使用的。

是否有一些简单的解决方案,或者我是否必须手动重新排列每个表单?

c# winforms dpi
2个回答
13
投票

创建 DPI 感知应用程序

所有容器必须使用相同的 AutoScaleMode - 这部分解决了我的问题

要求 Windows 应用程序在不同分辨率下应具有相同的布局,这意味着更改分辨率不应影响应用程序的布局。以下是执行此操作的步骤。

  1. 使用表格布局面板
  2. 将控件拖到tablelayoutpanel的单元格中并设置anchor和dock属性。
  3. 设置拖动控件的rowspan和colspan属性来合并单元格
  4. 设置拖动控件相对于单元格的边距和填充。
  5. 拖动所有控件并按照相同步骤,使用tablelayoutpanel完成设计
  6. 现在设置 tablelayoutpanel 的所有列和行大小 = autosize (或以 % 为单位)
  7. 设置tablelayoutpanel属性autosize = true,autosizemode =增长和收缩
  8. 设置表单属性 autosize = true,autosizemode = 增长和收缩
  9. 运行 Windows 应用程序如果您的 Windows 应用程序以最大状态打开,则设置 tablelayoutpanel 停靠属性 = fill。

0
投票

2023 更新

将此行添加到

Program.cs

class Program
{
    [STAThread]
    static void Main()
    {
...
        Application.SetHighDpiMode(HighDpiMode.DpiUnaware); // <-----
...
        Application.Run(new Form1());
    }
}

为了获得最佳结果,请尝试每种

HighDpiMode
模式。
DpiUnaware
对我有用,因为我设计的表单超过 100%(175%)。这取决于你的情况。

更多信息

https://learn.microsoft.com/en-us/dotnet/desktop/winforms/whats-new/net60?view=netdesktop-6.0#new-application-bootstrap

© www.soinside.com 2019 - 2024. All rights reserved.