Доступ к объекту, который является свойством другого объекта - VB
Формулировка задачи:
Здравствуйте, у меня следующая проблема.
Есть класс Test_class.
Одним из свойств этого класса является динамический массив объектов класса Question_class - Questions().
Необходимо в подпрограмме, которая использует объект Test_class обеспечить доступ к элементам массива Questions().
Пробовал объявить массив Questions() как Private, а не как Public, но при компиляции выбивает ошибку: Compile Error: Constants, Fixed Length strings,
Код в функции, в которой создан объект.
Может ли кто-то посоветовать, как получить доступ к объекту, который является свойством другого объекта. Спасибо.
Листинг программы
- Private Questions() As Question_class
- Private Quantity As Integer
- Private Name As String
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.
Листинг программы
- Public Function AddNextQuestion() As Long
- ReDim Preserve Questions(Quantity + 1)
- AddNextQuestion = ObjPtr(Questions(Quantity))
- Quantity = Quantity + 1
- End Function
Листинг программы
- Dim x As New Test_class
- Dim d As New Question_class
- d = x.AddNextQuestion()
Решение задачи: «Доступ к объекту, который является свойством другого объекта»
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д