包含表单的.NET类库中的SetCompatibleTextRenderingDefault

时间:2009-03-18 09:59:53

标签: vb.net class vb6

我有一个带有调用表单的com类的.net类库。 我想SetCompatibleTextRenderingDefault(false)以确保表单字体看起来不错。

如果我在类构造函数中运行该命令,则会收到以下错误: SetCompatibleTextRenderingDefault must be called before the first IWin32Window object is created in the application.

我可以/应该在哪里运行?当然没有比新的更早的地方!

提前感谢

乔恩

Edit1:为了澄清,我从.net测试工具启动类时遇到此错误,如果我从VB6应用程序调用它,那么我只是得到“自动化错误”

Edit2:从vb6应用程序调用时,我是不是在com类中使用SetCompatibleTextRenderingDefault的答案?也许这是需要调用此方法的“父”应用程序,因此vb6应用程序不能?

Edit3:也许我以错误的方式问这个问题! - 也许问题是:如何在从vb6 app调用的.net类库表单中使字体看起来不错?

2 个答案:

答案 0 :(得分:2)

可能的解决方法是在表单构造函数中的所有按钮和标签上手动设置属性:

public Form1()
{
    InitializeComponent();
    DisableCompatibleTextRendering(this);
}

private static void DisableCompatibleTextRendering(Control c)
{
    var button = (c as ButtonBase);
    var label = (c as Label);

    if (button != null)
    {
        button.UseCompatibleTextRendering = false;
    }

    if (label != null)
    {
        label.UseCompatibleTextRendering = false;
    }

    foreach (var child in c.Controls.Cast<Control>())
    {
        DisableCompatibleTextRendering(child);
    }
}

答案 1 :(得分:0)

在创建第一个窗口之前将其放在应用程序启动代码中。在C#下,这将是 main 例程,然后创建初始窗口。