Windows Forms C# 应用程序 - 当用户为操作系统字体大小选择 125% 或 150% 时,设置表单控件的字体大小以适应屏幕?
Posted
技术标签:
【中文标题】Windows Forms C# 应用程序 - 当用户为操作系统字体大小选择 125% 或 150% 时,设置表单控件的字体大小以适应屏幕?【英文标题】:Windows Forms C# application - Set font size of form controls to fit the screen when a user choose 125% or 150% for the OS font size? 【发布时间】:2021-03-13 03:51:56 【问题描述】:我们设计了一个适用于所有分辨率的 Windows 窗体应用程序。我们遇到了这样一种情况,当用户选择 125% 或 150% 的字体大小时,表单中所有控件的字体大小都会增加。我已将屏幕分辨率设置为 1440x900,并将设置更改为 125%,如下面的屏幕截图所示
在机器上进行这些设置并运行应用程序后,我们发现表单中所有控件的字体大小都增加了,并且与其他控件重叠。
您能否建议任何代码/过程来检测操作系统字体大小的增加,即超过 100% 并处理控件的字体大小?
【问题讨论】:
看看这个帖子:***.com/questions/5901299/… 这应该可以解决你的问题。 @Felixus 我的 Windows 应用程序中的所有表单都使用 AutoScaleMode.Font。我应该将其更改为 AutoScaleMode.Dpi 吗? 【参考方案1】:我会先尝试使用
System.Drawing.SystemFonts.DefaultFont
适用于所有表单元素。当使用不同的显示器、比例和分辨率时,AutoScale.Dpi 可能会导致您的 UI 发生一些奇怪的变化。
【讨论】:
System.Drawing.SystemFonts.DefaultFont 设置已正确应用于标签控件,但表单中也存在未应用该设置的 WPF 控件。你能建议需要做什么吗? 尝试将显示正确字体大小的标签的字体系列应用于 wpf 元素。这应该有效。由于我不与 wpf 合作,因此无法给您任何进一步的建议。 您能否建议如何在代码运行时检测到文本大小增加到 125%? 如果系统字体属性在事件之后引发,您可以使用事件处理程序。如果没有,请获取第二个线程或 BackgroundWorker 来检查 systemfonts.default 值。如果它发生变化,您可以引发自定义事件(但这种方法非常糟糕,因为它使用了相对大量的 ram)。 当我将 DPI 缩放比例从 100% 增加到 125% 或 150% 时,标签的字体大小没有增加。标签的字体大小在所有 DPI 缩放中都相同。尽管如此,某些表单的大小不正确,以至于一个控件与另一个控件重叠以上是关于Windows Forms C# 应用程序 - 当用户为操作系统字体大小选择 125% 或 150% 时,设置表单控件的字体大小以适应屏幕?的主要内容,如果未能解决你的问题,请参考以下文章
当线程在 main 上运行时,System.Windows.Forms 计时器不起作用
当窗口全屏或很大时,为啥 System.Windows.Forms.Timer 会自动停止?
在 Parallels 8 中的 Windows 7 上运行 C# Windows Forms 应用程序错误
如何检测 C# Windows Forms 代码在 Visual Studio 中执行?
防止 System.Windows.Forms.ComboBox 的自动选择行为(C#)
无法在 C# 中将类型“System.EventHandler”隐式转换为“System.Windows.Forms.KeyPressEventHandler”[重复]