C# 不同分辨率的不同PC上的不同字体大小

C# 不同分辨率的不同PC上的不同字体大小,c#,winforms,C#,Winforms,我已经创建了一个WinForm桌面应用程序 我已经在两台不同的客户端PC上安装了它 在1台PC上,标题与其控件相匹配。 另一方面,标签无法正确调整大小 我去检查了每台客户机上的分辨率,希望有所不同,但在1920x1080分辨率上它不适合,在1680x1050分辨率上它确实适合 为了让我的开发PC上的东西更奇怪,分辨率是1920x1080,是的,标签确实合适 表单和标签上的自动大小设置为“true” 我错过了什么 另一方面,标签无法正确调整大小 不,恰恰相反。它确实正确地调整了大小,为文本留出了足

我已经创建了一个WinForm桌面应用程序

我已经在两台不同的客户端PC上安装了它

在1台PC上,标题与其控件相匹配。 另一方面,标签无法正确调整大小

我去检查了每台客户机上的分辨率,希望有所不同,但在1920x1080分辨率上它不适合,在1680x1050分辨率上它确实适合

为了让我的开发PC上的东西更奇怪,分辨率是1920x1080,是的,标签确实合适

表单和标签上的自动大小设置为“true”

我错过了什么

另一方面,标签无法正确调整大小

不,恰恰相反。它确实正确地调整了大小,为文本留出了足够的空间。问题是,文本太宽了

这里有不止一个问题。起点是另一台机器以不同的DPI设置运行。每英寸点数,它决定字体大小(比如10个点)如何映射到屏幕上的像素。你有一个很好的显示器,一个1920 x 1080像素的高分辨率显示器。为了保持文本可读性,您需要10个点以获取更多像素。因此,您增加了DPI设置。在更高版本的Windows上非常容易操作,您可能会将滑块移动到125%。有效DPI为每英寸120点

但是,您的程序运行在较旧的计算机上,该计算机仍然具有传统设置100%=96 dpi。这往往会导致意外,如果窗体正确地重新调整了自身的大小,则可以避免最常见的意外。它会自动收缩以匹配较低的DPI设置。布局仍然正确,标签和文本框具有正确的大小和位置

但是你可以看到位图出了问题,它现在太大了,太适合空间了。这不是最令人讨厌的副作用。否则就不那么容易修复,要查看整个位图,它也必须缩小,这会导致它变得模糊并丢失细节。唯一完全干净的修复方法是有两个位图,每个位图的绘制都与目标机器的dpi相匹配。取消并经常跳过

转到您抱怨的问题,不同dpi设置下的文本渲染也可能是一个问题。有争议的是,文本的高度可以很好地缩放,但宽度却不能。技术术语是,文本呈现与分辨率无关。主要问题是像素网格拟合,这是一种用于在低显示器分辨率下提高文本可读性的技术。在TrueType提示的帮助下,字母的形状被拉伸,以便字符的词干正好落在监视器像素上。这大大提高了可读性,但当然,其副作用是,在这样的低分辨率显示器上,文本会更宽

但是你的文字太离谱了,需要另一种解释。这里最可能的不幸是您使用了旧机器上无法使用的字体。操作系统现在必须回退到替代字体,并且它的音高与原始字体非常不同。我看不到你的代码,但我大致猜测一下从Segoe到Microsoft Sans Serif的映射


对于这类问题没有简单的解决办法,这只是你需要注意的事情。一个基本的指导原则是,扩大规模几乎从来都不是问题,缩小规模要麻烦得多。因此,以96 dpi的速度运行dev机器通常是一个好主意,当然除了带来不便之外。需要在较旧的操作系统上进行测试,或者使用强烈声明的先决条件(如不支持XP)进行测试。但是,要求分辨率高于96 dpi仍然是不合理的,许多机器仍处于传统设置。一点也不,因为改变它会导致很多程序行为不端。96 dpi作为默认设置的时间太长了,那些日子已经过去了。

不确定,但这似乎与HI有关,是的,你是对的。谢谢解开了这个谜。只需要一个编程解决方案,因为用户想要使用他们的字体设置:@HansPassant HI,谢谢。所以我能看到的唯一设置是表单控件上的AutoScaleMode。我想是这个意思吧?嗯,我本来是把它设成DPI的。那个么,标签的什么属性让我可以从字体中插入?谢谢,谢谢你这么全面的回复。我意识到该字体可能不可用,所以我切换到Microsoft Sans Serif的系统字体。客户端PC上的DPI为125%。我的开发PC上的是100%。如果在客户端PC上切换到100%,则一切正常。但是,我仍然面临着针对具有不同DPI的PC的问题:唉,又一个不恰当的提醒,我永远不应该调试screenshots.lol中的代码。一开始你是对的,我改变的不是系统字体。我只是没有更新sreenshots,我应该道歉。这对我来说是个新问题,很抱歉我的问题不够全面。顺便说一句,我认为你的解释和可能的原因很好。 我会接受你的回答,我只是希望有人能提出一个解决方案。就像你说的,这不容易。,