Коллекция коллекций коллекций ...коллекций...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Коллекция коллекций коллекций ...коллекций...

Сообщение newonline » 04.09.2005 (Вс) 20:05

Если все будут искать в яндексе, Вам, господа хакеры, не над кем будет поиздеваться... :wink:

Нужна подсказка. Хочу (но пока немогу) реализовать такую мульку:

Создаю экземпляр объекта, этот экзмпляр содержит свойство имени, и еще кое-какие, а так же содержит коллекцию, в которую можно вновь добавить такой же экземпляр класса, который опять содержит коллекцию, в которую снова можно положить экземпляр... и т.д. Уровень вложенности - Long, пока оперативка не сдохнет.
Вообщем структура диска, в котором объекты - это файлы и папки., свойство имя - это соответственно имя файла или папки...

Это сложно сделать? :?
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Коллекция коллекций коллекций ...коллекций...

Сообщение tyomitch » 04.09.2005 (Вс) 20:11

newonline писал(а):Это сложно сделать? :?

Нет.
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.09.2005 (Вс) 20:13

Создай модуль класса
В нем напиши
Код: Выделить всё
Public x As clsBasic
Public sName as string
Public Param1 as string
'...
'...
'...

В коде формы пишешь
Код: Выделить всё
Dim x As clsBasic

Set x = New clsBasic


Смотри свойства x

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 04.09.2005 (Вс) 20:26

Amed писал(а):Создай модуль класса
В нем напиши
Код: Выделить всё
Public x As clsBasic
Public sName as string
Public Param1 as string
'...
'...
'...

В коде формы пишешь
Код: Выделить всё
Dim x As clsBasic

Set x = New clsBasic


Смотри свойства x



А где же Collection?
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.09.2005 (Вс) 20:29

Не мне же все писать. Шевели серым веществом :)

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 04.09.2005 (Вс) 20:34

Amed писал(а):Не мне же все писать. Шевели серым веществом :)


или коричневым...
ХЎ

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.09.2005 (Вс) 20:36

Советую взять палочку :)

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 04.09.2005 (Вс) 20:49

Оно не шевелится... почему-то :(

Ну объясни, я ниче не понял...(не про палочкы, а про коллекции) :cry:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 04.09.2005 (Вс) 21:14

коллекции палочек
ХЎ

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 04.09.2005 (Вс) 21:26

ну хорошш уже, злАдеи.
Me.подскажите. :cry:
где же автосписок коллекции (только не серых палочек)? :?
нY очинь нада!!!!!!!!!!!
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.09.2005 (Вс) 22:03

newonline, найди в MSDN статьи под названиями "Public Collection Example: The House of Straw", "Private Collection Example: The House of Sticks", и "Creating Your Own Collection Class: The House of Bricks". Они как раз про то, что тебе нужно.
Непонятные слова из статей можешь посмотреть в Яндексе.
Изображение

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 04.09.2005 (Вс) 22:31

FleX_2004 писал(а):А я вот создаю телевизор который показывает телевизор , который показывает телевизор , который показывает телевизор ......


во-во, тусани-ка исходничек :D
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Worobjoff
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 19.02.2005 (Сб) 17:51

Сообщение Worobjoff » 05.09.2005 (Пн) 8:37

Модуль класса clsFileColl
Код: Выделить всё
Option Explicit

Private mCol As Collection
Private m_Name As String
Private m_objParent As clsFileColl

Public Property Get Name() As String
   Name = m_Name
End Property
Public Property Let Name(ByVal New_Value As String)
   m_Name = New_Value
End Property

Public Property Get objParent() As clsFileColl
   Set objParent = m_objParent
End Property
Public Property Let objParent(ByVal New_Value As clsFileColl)
   Set m_objParent = New_Value
End Property

Public Function Add(ByVal Name As String) As clsFileColl
   Dim ob As clsFileColl
   Set ob = New clsFileColl
   ob.Name = Name
   ob.objParent = Me
   mCol.Add ob, Name
   Set Add = ob
   Set ob = Nothing
End Function

Public Property Get Item(vntIndexKey As Variant) As clsFileColl
   Set Item = mCol(vntIndexKey)
End Property

Public Property Get Count() As Long
   Count = mCol.Count
End Property

Public Sub Remove(vntIndexKey As Variant)
    mCol.Remove vntIndexKey
End Sub

Public Property Get NewEnum() As IUnknown
    Set NewEnum = mCol.[_NewEnum]
End Property

Private Sub Class_Initialize()
   Set mCol = New Collection
End Sub

Private Sub Class_Terminate()
   Set mCol = Nothing
End Sub

Тест класса
Код: Выделить всё
Private Sub Command1_Click()
   Dim i As Long, j As Long, k As Long
   Dim ob1 As clsFileColl
   Dim s As String
   
   Set ob1 = New clsFileColl
   ob1.Name = "Root"
   For i = 1 To 3
      With ob1.Add("Level2_Item_" & i)
         For j = 1 To 3
            With .Add("Level3_Item_" & j)
               For k = 1 To 3
                  .Add ("Level4_Item_" & k)
               Next
            End With
         Next
      End With
   Next
   
   s = ob1.Name
   For i = 1 To ob1.Count
      s = s & vbCrLf & vbTab & ob1(i).Name
      For j = 1 To ob1(i).Count
         s = s & vbCrLf & vbTab & vbTab & ob1.Item(i).Item(j).Name
         For k = 1 To ob1(i).Item(j).Count
            s = s & vbCrLf & vbTab & vbTab & vbTab & ob1.Item(i).Item(j).Item(k).Name
         Next
      Next
   Next
   Set ob1 = Nothing
   
   MsgBox s
End Sub

Сделано визардом, слегка поправлено.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.09.2005 (Пн) 9:33

Worobjoff, ты забыл указать, как надо Procedure Attributes расставить, чтобы заработало...
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 62

    TopList