设计时在 WinForms UserControl 中显示的弹出窗口的字体大小问题
Font Size issue with a popup shown at design-time in a WinForms UserControl
我有一个 WinForms 自定义控件,它具有显示弹出窗口的设计时功能。
如果我在 Windows 设置(控制 Panel\All 控制面板 Items\Display)中更改系统字体缩放比例,那么弹出窗口中的标签将被剪切。
在 this video 中,您可以看到标准字体大小和字体大小更改为 125% 时的不同行为。
这是设计时从智能标签打开时关于表单的屏幕截图:
这是在 运行 时间打开时关于表单的屏幕截图:
我该如何解决这个问题?
(Source)
我找到了一个解决方法,即在显示之前将比例因子设置为表单。
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 感知,这意味着它将自行处理不同的 DPI 设置。但是,关于表单似乎不支持不同的 DPI,因为您已将其 AutoScaleModel 属性 设置为字体。
当在 WindowsFormsApplication1 中使用 About 表单时,它可以工作 "fine" 因为该应用程序默认声明为非 DPI 感知。在这种情况下,操作系统会将表单呈现为沙盒中的位图,并在将其显示在屏幕上之前将其放大,因此您可以看到文本是模糊的。
为了避免 VS 设计器中的问题,您必须确保您的关于表单可以处理不同的 DPI 设置。实际上,您的解决方法是支持不同 DPI 设置的解决方案之一。
更新:
This post 详细描述了 WinForms 应用程序中的 DPI 感知。
我有一个 WinForms 自定义控件,它具有显示弹出窗口的设计时功能。
如果我在 Windows 设置(控制 Panel\All 控制面板 Items\Display)中更改系统字体缩放比例,那么弹出窗口中的标签将被剪切。
在 this video 中,您可以看到标准字体大小和字体大小更改为 125% 时的不同行为。
这是设计时从智能标签打开时关于表单的屏幕截图:
这是在 运行 时间打开时关于表单的屏幕截图:
我该如何解决这个问题?
(Source)
我找到了一个解决方法,即在显示之前将比例因子设置为表单。
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 感知,这意味着它将自行处理不同的 DPI 设置。但是,关于表单似乎不支持不同的 DPI,因为您已将其 AutoScaleModel 属性 设置为字体。
当在 WindowsFormsApplication1 中使用 About 表单时,它可以工作 "fine" 因为该应用程序默认声明为非 DPI 感知。在这种情况下,操作系统会将表单呈现为沙盒中的位图,并在将其显示在屏幕上之前将其放大,因此您可以看到文本是模糊的。
为了避免 VS 设计器中的问题,您必须确保您的关于表单可以处理不同的 DPI 设置。实际上,您的解决方法是支持不同 DPI 设置的解决方案之一。
更新: This post 详细描述了 WinForms 应用程序中的 DPI 感知。