在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
答案 0 :(得分:0)
我在MSDN论坛上发现类似的问题,提到在EnableVisualStyles()方法之后添加以下行。
Application.DoEvents()
似乎是旧.NET版本中的错误...您使用的是哪个版本?
答案 1 :(得分:0)
经过调查我得到了一些调查结果,所以我只回答我自己的问题:
坏消息:OldApp 使用的旧式文本呈现导致问题的原因。我通过在VS中切换标签控件的 UseCompatibleTextRendering 属性来验证它。我看到的字体失真与我在OldApp中看到的相同。这意味着我的代码中的 Application.SetCompatibleTextRenderingDefault(false)行无效。 OldApp将忽略它并进行旧式渲染。
正如DeviantSeev所建议的,使用更大的字体会有所帮助。它没有摆脱坏的字距,它只是让它不那么引人注目。我将字体从7.2pt增加到8pt(不是12pt),因为对话框变得太大了。这样做的方法是在表单字体属性(不是控件)中。这样,您就可以统一更改所有控件(如果他们的Font属性设置为默认值)。
VS中的字体大小似乎是离散的而不是连续的,或者可能涉及 int()四舍五入。将字体从7.2pt增加到7.4pt会导致变化很小,而在7.5pt时,字体会突然跳跃。
表单具有 AutoScaleMode 属性。如果它设置为字体且表单为可调整大小,则表单将在VS中按照字体大小的变化进行调整。这样,在VS中,您可以在(清晰易读的)字体大小和膨胀的对话框之间找到可接受的中间地带。但是,要小心:自动缩放操作可能会突然出错,例如,如果您将字体单位从点更改为像素,英寸等。您可能会突然得到微观控件或表单大于你的屏幕并点击撤消不能解决它。你真的不想再次重新设计你的表单,所以在之前保存任何字体单位更改,然后在你对所看到的内容感到满意时再保存。