Как создать сеттер / геттер UserControl в VB6? - PullRequest
1 голос
/ 15 сентября 2009

По неизвестной причине VB6 не взаимодействует с UserControl таким же образом, как другие объекты.

У меня есть класс, который требует хранения графического интерфейса, пользовательского элемента управления и должен быть установлен для последующего использования из метода get. Я пробовал много вещей, таких как использование специального класса VBControlExtender, но безуспешно.

Вот что у меня есть:

Класс, содержащий переменные и пользовательский элемент управления:

'...
Private WithEvents m_uGUI As VBControlExtender

Public Property Get GUI() As VBControlExtender
    Set GUI = m_uGUI
End Property

Public Property Set GUI(ByVal uValue As VBControlExtender)
    Set m_uGUI = uValue
End Property
'...

Вызов класса, который не может быть скомпилирован:

Set myObject.GUI = new ucMyUserControl

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 15 сентября 2009

Из справки об этой ошибке (упоминается ListBox и Form, но то же самое относится и к UserControls):

Новое ключевое слово может применяться только к Создаваемый объект ... Вы пытались создать экземпляр объекта автоматизации, но это был не создаваемый объект. За Например, вы пытались создать новый экземпляр списка со списком, указав ListBox в утверждении, как следующее: [образец кода отрезан] ListBox и Form являются именами классов, а не конкретные имена объектов. Ты можешь использовать им указать, что переменная будет быть ссылкой на определенный объект типа ... Но вы не можете использовать их для создавать экземпляры самих объектов в Установить заявление. Вы должны указать конкретный объект, а не универсальное имя класса в наборе утверждение:

То, что вы хотите сделать, - это создать массив ваших пользовательских контролей и загружать новые по мере необходимости. Установите для свойства Index вашего UserControl значение 0, чтобы сделать его массивом, а затем используйте оператор Load для создания новых экземпляров:

Load ucMyUserControl(1) 
Set myObject.GUI = ucMyUserControl(1)

Когда вам нужно больше, просто укажите новую верхнюю границу:

Load ucMyUserControl(2) 
Load ucMyUserControl(3)
...  

Когда вы закончите с ними, выгрузите их:

Unload ucMyUserControl(3)
Unload ucMyUserControl(2)
...
0 голосов
/ 15 сентября 2009

Я считаю, что VBControlExtender может использоваться только с динамически добавленными элементами управления (т.е. Controls.Add), а не с внутренними элементами управления. Почему вы не можете использовать ucMyUserControl в качестве типа вместо этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...