Доступ к объекту, который является свойством другого объекта - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы