【问题标题】:VB6 Automation Error when calling Add on previously created MultiPage在以前创建的 MultiPage 上调用 Add 时出现 VB6 自动化错误
【发布时间】:2018-07-17 09:05:54
【问题描述】:

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

重现步骤

在名为 TestClass 的类模块中:

Public WithEvents TestMultiPage As MsForms.MultiPage

Sub createPage()
    TestMultiPage.Add
End Sub

在一个名为 TestForm 的用户窗体中:

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

当我右键单击用户窗体两次时,我得到两个多页。然后我双击用户窗体,期望第一个 MultiPage 有一个新页面。但是我在TestInstance.createPage -> TestMultiPage.Add 遇到了自动化错误,即使所有变量似乎都从Locals 窗口中出现。

我错过了什么?

结论

按照@GSerg 的回答,我想MultiPage 没有办法做到这一点。 相反,我必须改用 TabStrip 并模拟 MultiPage 的其他行为。

只是为了添加一些上下文,我试图创建一个带有窗口和选项卡的类似浏览器的 UI(底部的 TabStrip 代表不同的窗口,每个窗口对应于具有多个选项卡的 MultiPage)。切换回之前的 MultiPage 并创建新标签时,我遇到了一个晦涩的错误。

【问题讨论】:

    标签: excel vba vb6 runtime-error excel-automation


    【解决方案1】:

    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 中的一个错误。

    否则控件工作正常,并且它们的属性是可访问的,你不能再调用Add

    【讨论】:

    • 谢谢 - 我将 _Click 事件更改为 _MouseDown 和 If Button = fmButtonRight ,并删除了 -1 并且它有效。当我尝试切换回以前创建的 MultiPage 和 .Add 时,出现了原始问题。将更新问题。
    • @iamanigeeit 不。我玩过可见性,将多页添加到自己的框架/嵌套容器中,这似乎没有什么区别。我也怀疑它永远不会被修复or even noticed
    • 好的,感谢您的测试! TabStrip 不会出现问题,所以我想我需要用 TabStrip 模拟 MultiPage。问题已更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2017-01-11
    • 1970-01-01
    • 2012-10-30
    相关资源
    最近更新 更多