Доступ к объекту, который является свойством другого объекта - VB
Формулировка задачи:
Здравствуйте, у меня следующая проблема.
Есть класс Test_class.
Одним из свойств этого класса является динамический массив объектов класса Question_class - Questions().
Необходимо в подпрограмме, которая использует объект Test_class обеспечить доступ к элементам массива Questions().
Пробовал объявить массив Questions() как Private, а не как Public, но при компиляции выбивает ошибку: Compile Error: Constants, Fixed Length strings,
arrays
, user-defined types not allowed as Public Members of object modules. Также пытался использовать функцию ObjPtr, чтобы вернуть указатель на объект. Однако при запуске программе пишет Run-time Error '438'. Object doesn't support this property or method.Код в функции, в которой создан объект.
Может ли кто-то посоветовать, как получить доступ к объекту, который является свойством другого объекта. Спасибо.
Решение задачи: «Доступ к объекту, который является свойством другого объекта»
textual
Листинг программы
'модуль класса Question_Class Private objName As String 'допустим у каждого экземляра будет своё имя Private Hey_You As Long 'и каждый экземпляр будет считать количество обращений к себе Private Sub Class_Initialize() Dim i As Integer Randomize For i = 0 To 4 objName = objName & Chr(CLng(Rnd * 25 + 97)) Next i End Sub 'придумаем случайное имя экземляру класса при его создании Public Sub ObjClick() Hey_You = Hey_You + 1 End Sub 'процедура запоминаня количества обращений к объекту Public Function GetName() As String GetName = objName End Function 'соответственно научим класс сообщать своё имя Public Function GetHey() As Long GetHey = Hey_You End Function 'и сообщать сколько раз его кликали '************************************************** 'модуль класса Test_Class Private Questions() As Question_Class Private Quantity As Integer 'размер массива Private Position As Integer 'текущий элемент Private Sub Class_Initialize() Quantity = -1 Position = -1 End Sub Public Property Get CurIndex() As Integer CurIndex = Position End Property Public Property Let CurIndex(ByVal vNewValue As Integer) Position = vNewValue End Property Public Sub AddNextQuestion() Quantity = Quantity + 1 ReDim Preserve Questions(Quantity) Set Questions(Quantity) = New Question_Class Position = Quantity End Sub Public Function CurQuestion() As Question_Class If Position > -1 Then Set CurQuestion = Questions(Position) Else MsgBox "Массив не заполнен!", , "" End If End Function '************************************************** 'модуль формы, на форме три кнопки и листбокс для удобства Dim t As New Test_Class Private Sub Form_Load() Command1.Caption = "Add element" Command2.Caption = "Get Name" Command3.Caption = "Get Hey" End Sub Private Sub Command1_Click() t.AddNextQuestion List1.AddItem "one instance" End Sub Private Sub Command2_Click() 'проверяем, если элемент не пустой, то показываем имя If Not t.CurQuestion Is Nothing Then MsgBox t.CurQuestion.GetName End Sub Private Sub Command3_Click() 'проверяем, если элемент не пустой, то показываем количество кликов If Not t.CurQuestion Is Nothing Then MsgBox t.CurQuestion.GetHey End Sub Private Sub List1_Click() t.CurIndex = List1.ListIndex t.CurQuestion.ObjClick End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д