【问题标题】:UseCompatibleTextRendering property not created by designer when it is set to falseUseCompatibleTextRendering 属性设置为 false 时不是由设计器创建的
【发布时间】:2009-08-18 22:36:17
【问题描述】:

我不想使用兼容的文本渲染,但我不想使用

Application.SetCompatibleTextRenderingDefault(false);

当然,我认为我所要做的就是将每个标签的 UseCompatibleTextRendering 属性设置为 false。然而,表单设计器显然只在 UseCompatibleTextRendering 设置为 true 时生成设置属性的代码。

没问题,我想,这一定意味着 UseCompatibleTextRendering 默认初始化为 false。然而,当我启动我的表单时,你瞧,我看到了丑陋的 CompatibleTextRendering。所以,一个问题:

1) 为什么当我将 UseCompatibleTextRendering 设置为 false 时设计器不添加代码,而当我将其设置为 true 时 is 如果默认为 true?

【问题讨论】:

    标签: c# winforms windows-forms-designer


    【解决方案1】:

    设计器没有添加将UseCompatibleTextRendering设置为false的代码,因为false是默认值。

    那么,为什么控件默认使用兼容的文本渲染,如果属性的默认值为false,这似乎是……奇怪?那么Application.SetCompatibleTextRenderingDefault方法将给定的值赋给Control类中的一个静态字段,Control类的静态构造函数将该字段初始化为true

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

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

    【讨论】:

    • 谢谢。为什么 Control.UseCompatibleTextRenderingDefault 被初始化为 true 让我感到困惑。
    【解决方案2】:

    问题出现在我为在 Microsoft Excel 中使用而编写的 Com-Interop-DLL 中。

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

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

    为了纠正这个问题,我必须遍历所有标签和按钮,并将 Form.Load 事件上的 UseCompatibleTextRendering 设置为 false。 我发现在 DLL 和 Excel 中都无法使用 SetCompatibleTextRenderingDefault

    【讨论】:

    • 编辑:如果您创建控制台应用程序并引用 DLL 以显示 windows 窗体,也会发生同样的情况。
    • 有一个注意事项,你不能改变它父应用程序在这里设置它(对于第一个 WinForm):docs.microsoft.com/en-us/dotnet/api/… Exceptions InvalidOperationException 你只能在你创建第一个窗口之前调用这个方法Windows 窗体应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多