Ошибка автоматизации 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
больше.