繁体   English   中英

在 WinForms UserControl 中设计时显示弹出窗口的字体大小问题

[英]Font Size issue with a popup shown at design-time in a WinForms UserControl

我有一个 WinForms 自定义控件,带有显示弹出窗口的设计时功能。

如果我在 Windows 设置(控制面板\\所有控制面板项目\\显示)中更改系统字体缩放比例,则弹出窗口中的标签将被剪切。

此视频中,您可以看到标准字体大小和字体大小更改为 125% 时的不同行为。

这是在设计时从智能标签打开时关于表单的屏幕截图:

在此处输入图片说明

这是在运行时打开时关于表单的屏幕截图:

在此处输入图片说明

我该如何解决这个问题?

来源

我通过在显示之前将比例因子设置为表单找到了一种解决方法。

public void About()
{
    float width, height;
    using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
    {
        width = graphics.DpiX / 96;
        height = graphics.DpiY / 96;
    }            
    About form = new About();            

    if (width != 1 || height != 1)
        form.Scale(new SizeF(width, height));

    form.ShowDialog();
}

它似乎工作正常。

Visual Studio (VS) 设计器中的问题是 Visual Studio 被声明为 DPI-aware,这意味着它将自行处理不同的 DPI 设置。 但是,“关于”表单似乎不支持不同的 DPI,因为您已将其 AutoScaleModel 属性设置为 Font。

在 WindowsFormsApplication1 中使用 About 表单时,它可以“正常”工作,因为默认情况下该应用程序被声明为非 DPI 感知的。 在这种情况下,操作系统会将表单呈现为沙箱中的位图,并在将其显示在屏幕上之前将其放大,因此您可以看到文本是模糊的。

为了避免 VS 设计器中的问题,您必须确保“关于”表单可以处理不同的 DPI 设置。 实际上,您的解决方法是支持不同 DPI 设置的解决方案之一。

更新: 这篇文章详细描述了 WinForms 应用程序中的 DPI 感知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM