设置为false时,UseCompatibleTextRendering属性不是由设计者创建的

时间:2009-08-18 22:36:18

标签: c# winforms windows-forms-designer

我不希望使用兼容的文本呈现,但我不想使用

Application.SetCompatibleTextRenderingDefault(false);

当然,我认为我所要做的就是将每个标签的UseCompatibleTextRendering属性设置为false。但是,如果UseCompatibleTextRendering设置为true,则表单设计器显然只生成用于设置属性的代码。

没问题,我想,这必定意味着默认情况下UseCompatibleTextRendering被初始化为false。然而,当我启动我的表格时,我看到丑陋的CompatibleTextRendering。所以,一个问题:

1)为什么设计师在我将其设置为false时添加UseCompatibleTextRendering的代码并且当我将其设置为true时,如果默认值为true,那么该设计师是不是?

2 个答案:

答案 0 :(得分:5)

设计人员不会添加用于将UseCompatibleTextRendering设置为false的代码,因为false是默认值。

那么,为什么默认情况下控件使用兼容的文本呈现,如果属性的默认值是false,那似乎是......奇怪的?好吧,Application.SetCompatibleTextRenderingDefault方法将给定值分配给Control类中的静态字段,Control类的静态构造函数将此字段初始化为true

因此,删除行Application.SetCompatibleTextRenderingDefault(false);将导致应用程序使用兼容的文本呈现,这与您根据UseCompatibleTextRendering属性的默认值所想的相反。

我能看到的唯一合理的解决方案就是将自动生成的调用留给Application.SetCompatibleTextRenderingDefault

答案 1 :(得分:3)

我在 Microsoft Excel 中编写的 Com-Interop-DLL 中出现此问题。

DLL是用 VB.NET 编写的,包含一个从 Excel 中显示的表单。

现在, Excel.Application 默认将UseCompatibleTextRendering设置为true。因此,如果DLL嵌入在 Excel (GDI + -Graphics-Class)中,但完全正确地从任何 .Net-Windows应用程序中嵌入,则表单的所有标签和按钮都会呈现不佳。

要解决此问题,我必须遍历所有标签和按钮,并在UseCompatibleTextRendering事件上将false设置为Form.Load。 我发现无法在DLL中或Excel中使用SetCompatibleTextRenderingDefault