1

当我将 VB 转换为 VB.NET 时,我发现了错误InvalidActiveXStateException。我的程序有一个主窗体和许多子窗体,当我检查子窗体时,其中一个出现此错误,无法打开该窗体,但其他窗体可以正确打开。代码是一样的。为什么我打不开那个表格?

我曾在互联网上进行过研究,大多数人都说:

((System.ComponentModel.ISupportInitialize)(this.ax)).BeginInit();

this.Controls.Add(ax);

((System.ComponentModel.ISupportInitialize)(this.ax)).EndInit();

但似乎 C# 不是 VB.NET,我不知道什么时候可以在我的程序中找到 ax 的名称。这是我的程序代码的一部分。

Public Sub mnu_dceedc_enq_Click(ByVal eventSender As System.Object, ByVal eventArgs        As System.EventArgs) Handles mnu_dceedc_enq.Click
    If bolCheckSecurity("dcs_eedc_enq") Then
        Unload_frm()
        DCformfun = mnu_dceedc_enq.Name
        frmDCEEDC.Show()
    End If
End Sub

Private Sub chkfiltercase_CheckStateChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles chkfiltercase.CheckStateChanged
    '20090401
    'fgdetail_Click

    Call ShowFolderDetail(fgdetail.get_TextMatrix(fgdetail.Row, 1), fgdetail.get_TextMatrix(fgdetail.Row, 2), CShort(txtbatchno.Text))
End Sub

当我打开一个子表单时,它会从开始nu_dceedc_enq_Click然后转到,chkfiltercase_CheckStateChanged但是当我遇到时Call ShowFolderDetail,它会自动返回form.show()并发生异常。

为什么会发生此错误,我该如何解决?

测试后更新:

我尝试评论所有 Subchkfiltercase_CheckStateChanged并且表单成功发生,我试图测试它是否会发生其他人。

4

2 回答 2

0

我遇到了同样的问题,我尝试了调用 CreateControl 的建议解决方案,但没有成功。

事实证明,互操作是针对 .net 2.0 框架生成的,并且在从 4.0 代码调用时出现了问题。解决方案是使用.NET Framework Tools 4.0生成互操作。

于 2013-07-22T14:27:13.293 回答
0

活动 x 控件的标准转换/使用的部分作用是为控件创建状态。此状态并不总是正确设置/创建,并且有时会在您在调试器中运行应用程序时发生更改。当状态无效时,抛出此异常。我通常会尝试将活动 x 控件替换为 .net 控件(已经存在的控件或创建等效控件)。

据说标准工具的一些商业替代品可以避免这个问题。

于 2012-08-09T02:47:09.563 回答