在以前创建的MultiPage上调用加载项时发生VB6自动化错误



我想在我的应用程序中生成一堆MultiPages并动态创建新页面,但我收到了运行时错误'-2147417848(80010108(':自动化错误调用的对象已与其客户端断开连接。

复制步骤

在名为TestClass的类模块中:

Public WithEvents TestMultiPage As MsForms.MultiPage
Sub createPage()
TestMultiPage.Add
End Sub

在名为TestForm的UserForm中:

Dim TestInstances as New Collection
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X as Single, ByVal Y as Single)
If Button = fmButtonRight Then
Dim TestInstance as New TestClass
Set TestInstance.TestMultiPage = Me.Controls.Add("Forms.MultiPage.1")
TestInstances.Add TestInstance
End If
End Sub
Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim TestInstance As TestClass: Set TestInstance = TestInstances(1)
TestInstance.createPage
End Sub

当我右键单击UserForm两次时,我会得到两个MultiPages。然后我双击UserForm,期望第一个MultiPage有一个新页面。但我在TestInstance.createPage->TestMultiPage.Add遇到了自动化错误,尽管所有变量似乎都来自Locals窗口。

我错过了什么?

结论

根据@GSerg的回答,我想用MultiPage是没有办法做到这一点的。相反,我不得不使用TabStrip,并模仿MultiPage的其他行为。

只是为了添加一些上下文,我试图创建一个类似浏览器的UI,其中包含窗口和选项卡(底部的TabStrip表示不同的窗口,每个窗口对应于一个具有多个选项卡的MultiPage(。我在切换回以前的MultiPage并创建新选项卡时遇到了一个模糊的错误。

MSForms中似乎存在一个问题,当添加新控件时,它会削弱现有的MultiPage控件。要重现问题,您不需要集合、数组、类,甚至变量:

Sub Reproduce()
Me.Controls.Add "Forms.MultiPage.1", "TestInstance1"
Me.Controls("TestInstance1").Add  ' That works
Me.Controls.Add "Forms.MultiPage.1", "TestInstance2"
Me.Controls("TestInstance1").Add  ' Now it does not
Me.Controls("TestInstance2").Add  ' But the new shiny one does
Me.Controls.Add "Forms.MultiPage.1", "TestInstance3"
Me.Controls("TestInstance2").Add  ' Now the instance 2 is also defunct
Me.Controls("TestInstance3").Add  ' Only the latest one works
End Sub

我不知道为什么会这样。它看起来像MSForms中的一个bug。

控件在其他情况下工作正常,并且它们的属性是可访问的,您不能再调用Add了。

相关内容

  • 没有找到相关文章

最新更新