使Label控件文本看起来与VS表单设计器中的一样好

时间:2011-11-20 05:39:09

标签: c# visual-studio-2008 fonts textbox

在VS2008中,我为C#dll设计了一个表单。这个dll是一个较旧的应用程序的插件(大约2005年):我们称之为“OldApp”。在VS表单设计器中,我的表单上的Label控件中的文本很好地呈现:antialiased和kerned。但是当我在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

2 个答案:

答案 0 :(得分:0)

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

Application.DoEvents()

似乎是旧.NET版本中的错误...您使用的是哪个版本?

答案 1 :(得分:0)

经过调查我得到了一些调查结果,所以我只回答我自己的问题:

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

  2. 正如DeviantSeev所建议的,使用更大的字体会有所帮助。它没有摆脱坏的字距,它只是让它不那么引人注目。我将字体从7.2pt增加到8pt(不是12pt),因为对话框变得太大了。这样做的方法是在表单字体属性(不是控件)中。这样,您就可以统一更改所有控件(如果他们的Font属性设置为默认值)。

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

  4. 表单具有 AutoScaleMode 属性。如果它设置为字体且表单为可调整大小,则表单将在VS中按照字体大小的变化进行调整。这样,在VS中,您可以在(清晰易读的)字体大小和膨胀的对话框之间找到可接受的中间地带。但是,要小心:自动缩放操作可能会突然出错,例如,如果您将字体单位从点更改为像素,英寸等。您可能会突然得到微观控件或表单大于你的屏幕并点击撤消不能解​​决它。你真的不想再次重新设计你的表单,所以在之前保存任何字体单位更改,然后在你对所看到的内容感到满意时再保存。