Excel VBA和C#DLL:实例化WinForms对象只能执行一次。在第二次尝试时出现错误

约尔格

我建立了一个包含Winform的C#dll。我想从Excel VBA中打开表单。第一次尝试总是成功的。它会打开并执行我要执行的所有操作。然后,使用右上角的红色X将其关闭。

当我尝试第二次打开它时,总是收到错误消息:“在应用程序中创建第一个IWin32Window对象之前,必须调用SetCompatibleTextRenderingDefault。” 来源:System.Windows.Forms

WinForms类是Visual Studio生成的标准类。我在另一个类中实例化它:

namespace Schnittstellenvererbung
{
    [ComVisible(true), Guid("5D16EABF-B89F-45A1-8E4D-ACFAA084BF6F")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface ISchnittstellenvererbung
    {
        string ShowForm1();
    }

    [ComVisible(true), Guid("6A9EF0BB-BFF3-456E-B025-CB6A25F81F59")]
    [ProgId("Test.SchnittstellenvererbungExecuteProgram")]
    [ClassInterface(ClassInterfaceType.None)]
    public class ExecuteProgram : ISchnittstellenvererbung
    {
        public string ShowForm1()
        {
           try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Form1 Oberflaeche;
                Oberflaeche = new Form1();
                Oberflaeche.ShowDialog();
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message + e.Source);
            }

            return "Done";
        }
    }
}

在Excel VBA中,调用非常简单:

Sub test()

    Dim y As String
    Dim x As New Schnittstellenvererbung.ExecuteProgram

    y = x.ShowForm1

End Sub

当我关闭Excel并重新打开它时,它在第一次尝试时就可以再次使用,但是第二次尝试又失败了。

我不知道为什么会出现此错误,因为在初始化表单之前总是调用方法SetCompatibleTextRenderingDefault。

有想法吗?

约尔格

我在msdn中找到了解决方案。Windows窗体在单独的线程中运行。示例代码为VB,但转换为C#并不难。如果有人需要帮助,可以使用teleriks代码转换器进行转换。

链接:

MSDN解决方案:https : //msdn.microsoft.com/zh-cn/library/ms229591%28v=vs.110%29.aspx

代码转换器:http//converter.telerik.com/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Excel 使用 VBA 第二次尝试打印时出现运行时错误“1004”粘贴范围类的特殊方法失败

访问VBA与Excel进行交互,第二次出现错误91

Excel VBA授权在第一次运行时失败,第二次运行良好

Excel:将字符返回到最后一次(或倒数第二次)出现的左侧和右侧吗?

尝试在初始“取消”后或在红色“ X”上关闭后尝试第二次启动时,Excel用户窗体运行时错误

第二次打开表单会引发运行时错误 9 Excel VBA

excel2img在第二次使用时给出错误“对象没有属性'parent'”

VBA Excel 到 Word - 在第二次循环运行时另存为 pdf 失败

第二次实例化预制件时,为什么会出现错误?

Excel工作表SelectionChange事件不会触发第一时间,但可以第二次工作

excel 公式编程下一个更高的第二次幂 (2^n)

Excel Visual Basic SpinButton1 不适用于第二次搜索

第二次实例化类时出错

一次删除/复制/粘贴多个单元格时执行Excel VBA代码

第二次执行宏时出现运行时错误 1004

用不同的字符替换第一次出现和第二次出现

查询正在第二次尝试但不是第一次尝试

Linq语句仅执行一次,并且在foreach循环中第二次尝试及以上时返回零

修改字符串的第一次和第二次出现和重置

我的Lex and Yacc程序可以运行一次,然后在第二次尝试时崩溃?

在第二次执行时暂停函数的第一次执行(Python)

仅当第一次失败时才执行第二次 http 调用

SQL 拆分字符串并合并第一次和第二次出现

第一次和第二次出现在PostgreSQL中的行ID

使用Jquery定位页面上Div的第一次和第二次出现

GPU MATLAB 在第一次和第二次执行之间给出不同的经过时间

为什么当我想第二次上传文件(第一次完美)时出现 Multer 错误(在 express js 中)?

尝试输入结构,第一次效果很好,第二次崩溃

验证:在 VBA Excel 的文本框中只能输入一次特定的单词