使标签控件文本看起来像它在VS表单设计器中一样好

本文关键字:一样 表单 文本 控件 标签 看起来 VS | 更新日期: 2023-09-27 18:15:10

在VS2008中,我为c# dll设计了一个表单。dll是一个有点老的应用程序(大约2005年)的插件:让我们称之为"OldApp"。在VS表单设计器中,我的表单上的标签控件中的文本被很好地渲染:抗锯齿和正确的角化。但是当我在OldApp (c# dll作为插件运行的地方)中打开这个表单时,Label控件中的文本看起来很难看。它是可读的,但字距很差:字母间距更远,似乎是随机偏移。我能做些什么来使文本标签从OldApp内看起来像他们在VS的表单设计器一样好吗?我怀疑具体的字体问题,但它是Arial, 7.2 pt (VS2008默认)。我试着在Program.cs中使用这两行相关的代码(见下文),但没有效果。

Application.EnableVisualStyles(); // tried using it and commenting it out
Application.SetCompatibleTextRenderingDefault(true); // tried true and false

使标签控件文本看起来像它在VS表单设计器中一样好

我在MSDN论坛上发现了一个类似的问题,提到在EnableVisualStyles()方法之后添加以下行。

Application.DoEvents()

似乎是旧。net版本中的一个bug…你用的是哪个版本?

经过调查,我有一些发现,所以我只回答我自己的问题:

  1. 坏消息:OldApp 使用的旧式文本渲染是导致问题的原因。我通过在vs中切换标签控件的UseCompatibleTextRendering属性来验证它。我看到的字体失真是与我在OldApp中看到的相同。这意味着Application.SetCompatibleTextRenderingDefault(false)行在我的代码中具有没有效果。OldApp会忽略,并进行旧式渲染。

  2. 根据DeviantSeev的建议,使用更大的字体会有所帮助。它并没有消除糟糕的字距,它只是让它不那么明显。我将字体从7.2pt增加到8pt(不是12pt),因为否则对话框会变得太大。要做到这一点的方法是在表单的 Font属性(而不是控件的)。这样,你就可以统一地改变所有控件(如果它们的Font属性被设置为default)。

  3. VS中的字体大小似乎是离散的而不是连续的,或者可能有一个int()四舍五入涉及。将字体从7.2pt增加到7.4pt,变化很小,而在7.5pt时,字体的大小会突然跳跃。

  4. 表单有一个AutoScaleMode属性。如果它被设置为Font并且窗体是 resizing ,窗体将根据字体大小的变化按比例调整大小。这样,在VS中,你可以在(易读的)字体大小和臃肿的对话框之间找到一个可接受的中间地带。但是,要小心:自动缩放操作可能会突然出错,例如,如果您将Font 单位从点更改为像素、英寸等。你可能会突然结束微观控制或窗体比你的屏幕更大,点击撤销不会修复它。你真的不想再重新设计你的表单,所以在任何字体单位改变之前保存它,然后当你对你看到的满意时再保存。