Ошибка автоматизации VB6 при вызове Add на ранее созданной 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.

Просто чтобы добавить контекст, я пытался создать подобный браузеру пользовательский интерфейс с окнами и вкладками (TabStrip внизу представляет различные окна, каждое окно соответствует MultiPage с несколькими вкладками). Я столкнулся с непонятной ошибкой при переключении на предыдущую MultiPage и создании новой вкладки.

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 больше.

Другие вопросы по тегам