首页 > 解决方案 > 如何使自动 DPI 缩放适用于未使用 InitializeComponent(); 构建的表单?

问题描述

这是this的后续问题,但我将在此处包含所有必要的信息。我想知道是否有一种方法可以为更高的 DPI 设置自动扩展应用程序,事实证明确实存在。我目前通过添加 app.manifest 并激活有关 DPI 感知的注释部分来实现这一点,但我也通过程序主方法中的 SetProcessDPIAware() 完成了此操作,产生了相同的结果。

当我使用 Visual Studio 的表单设计器构建表单时,当我以 125% 的缩放设置运行程序时,整个表单都会按比例放大。但是,当我使用Label xinputtext = new Label { Location = new Point(15, 20)}表单的类和Controls.Add(xinputtext)表单的构造方法中的行组合构建表单时,只有文本被放大,没有任何控件。

如何在使用 Designer 的情况下设计受自动 DPI 缩放影响的表单?

根据要求,这是一个演示:

namespace Just_testing
{
    public partial class Form1 : Form
    {
        public Form1()
        {
           Controls.Add(button1);
           Controls.Add(button2);
        }

        Button button1 = new Button { Location = new Point(13, 13), Text = "button1" };
        Button button2 = new Button { Location = new Point(13, 35), Text = "button2" };
    }
}

将 Windows 的显示比例设置为 100% 时,屏幕左上角显示如下:
100% 规模

将 Windows 的显示比例设置为 150% 时,显示如下:
150% 实际比例

当我使用设计器而不是代码来放置这些控件时,将 Windows 的显示比例设置为 150%,它显示如下:这就是我想要的。请注意,问题不在于第二张图像中的文本太大:文本正确缩放,但我希望按钮和其他所有内容(当然包括位置)也随之缩放。如果您使用设计器构建控件,就会发生这种情况。
需要 150% 的比例

标签: c#.netwinformsdpi

解决方案


推荐阅读