Доступ к объекту, который является свойством другого объекта - VB

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, у меня следующая проблема. Есть класс Test_class. Одним из свойств этого класса является динамический массив объектов класса Question_class - Questions().
Листинг программы
  1. Private Questions() As Question_class
  2. Private Quantity As Integer
  3. Private Name As String
Необходимо в подпрограмме, которая использует объект 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.
Листинг программы
  1. Public Function AddNextQuestion() As Long
  2. ReDim Preserve Questions(Quantity + 1)
  3. AddNextQuestion = ObjPtr(Questions(Quantity))
  4. Quantity = Quantity + 1
  5. End Function
Код в функции, в которой создан объект.
Листинг программы
  1. Dim x As New Test_class
  2. Dim d As New Question_class
  3. d = x.AddNextQuestion()
Может ли кто-то посоветовать, как получить доступ к объекту, который является свойством другого объекта. Спасибо.

Решение задачи: «Доступ к объекту, который является свойством другого объекта»

textual
Листинг программы
  1. 'модуль класса Question_Class
  2. Private objName As String
  3. 'допустим у каждого экземляра будет своё имя
  4. Private Hey_You As Long
  5. 'и каждый экземпляр будет считать количество обращений к себе
  6.  
  7. Private Sub Class_Initialize()
  8. Dim i As Integer
  9. Randomize
  10. For i = 0 To 4
  11.     objName = objName & Chr(CLng(Rnd * 25 + 97))
  12. Next i
  13. End Sub
  14. 'придумаем случайное имя экземляру класса при его создании
  15.  
  16. Public Sub ObjClick()
  17. Hey_You = Hey_You + 1
  18. End Sub
  19. 'процедура запоминаня количества обращений к объекту
  20.  
  21. Public Function GetName() As String
  22. GetName = objName
  23. End Function
  24. 'соответственно научим класс сообщать своё имя
  25.  
  26. Public Function GetHey() As Long
  27. GetHey = Hey_You
  28. End Function
  29. 'и сообщать сколько раз его кликали
  30. '**************************************************
  31. 'модуль класса Test_Class
  32. Private Questions() As Question_Class
  33. Private Quantity As Integer 'размер массива
  34. Private Position As Integer 'текущий элемент
  35.  
  36. Private Sub Class_Initialize()
  37. Quantity = -1
  38. Position = -1
  39. End Sub
  40.  
  41. Public Property Get CurIndex() As Integer
  42. CurIndex = Position
  43. End Property
  44.  
  45. Public Property Let CurIndex(ByVal vNewValue As Integer)
  46. Position = vNewValue
  47. End Property
  48.  
  49. Public Sub AddNextQuestion()
  50. Quantity = Quantity + 1
  51. ReDim Preserve Questions(Quantity)
  52. Set Questions(Quantity) = New Question_Class
  53. Position = Quantity
  54. End Sub
  55.  
  56. Public Function CurQuestion() As Question_Class
  57. If Position > -1 Then
  58.     Set CurQuestion = Questions(Position)
  59. Else
  60.     MsgBox "Массив не заполнен!", , ""
  61. End If
  62. End Function
  63. '**************************************************
  64. 'модуль формы, на форме три кнопки и листбокс для удобства
  65. Dim t As New Test_Class
  66.  
  67. Private Sub Form_Load()
  68. Command1.Caption = "Add element"
  69. Command2.Caption = "Get Name"
  70. Command3.Caption = "Get Hey"
  71. End Sub
  72.  
  73. Private Sub Command1_Click()
  74. t.AddNextQuestion
  75. List1.AddItem "one instance"
  76. End Sub
  77.  
  78. Private Sub Command2_Click() 'проверяем, если элемент не пустой, то показываем имя
  79. If Not t.CurQuestion Is Nothing Then MsgBox t.CurQuestion.GetName
  80. End Sub
  81.  
  82. Private Sub Command3_Click() 'проверяем, если элемент не пустой, то показываем количество кликов
  83. If Not t.CurQuestion Is Nothing Then MsgBox t.CurQuestion.GetHey
  84. End Sub
  85.  
  86. Private Sub List1_Click()
  87. t.CurIndex = List1.ListIndex
  88. t.CurQuestion.ObjClick
  89. End Sub

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


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

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

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы