Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Как вытащить из коллекции значение "key"??


Автор: FloodF 16.4.2006, 21:34
Пишу на VB6
У меня коллекциия "var" содержащая переменные которые поступают туда в процессе выполнения программы.
Добавляю item: "var.Add значение_переменной, название_переменной" (название идет за ключ)
обращаюсь к этой базе есстественно так:
var.Item(название_переменной) и она возвращает значение. И все отлично работает! Но возникла проблема при сохрании:
я могу вытащить из этой базы значение но не могу название (key)! Подскажите пожалуйста как это сделать!

Автор: Akina 17.4.2006, 08:50
Код

For i = 0 to var.Count - 1
    Debug.Print var(i).Name
Next
 

Автор: boevik 17.4.2006, 08:57
1) коллекции начинаются не с 0, а с 1.
2) значение_переменной (в этом случае) - это обычный string и ни какого property Name не имеет.

На прямую, из коллекции не вытащить.
Можно извращаться и добавлять объект в коллекции, который включает и key и value.
Или к value присоединить key и делить split-ом. 

Автор: Akina 17.4.2006, 09:06
Цитата(boevik @  17.4.2006,  09:57 Найти цитируемый пост)
1) коллекции начинаются не с 0, а с 1.
2) значение_переменной (в этом случае) - это обычный string и ни какого property Name не имеет.

Это зависит от того, как именно была создана коллекция. Если она порождена от стандартной Collection, то от нуля и с Name - например коллекции контролов ведут себя именно так.

Впрочем независимо от типа коллекции можно ее проходить через
Код

For Each OneVar  in var
    Debug.Print OneVar.Name
Next

Или использовать свойство Item 

Автор: boevik 17.4.2006, 09:15
Насколько я понимаю, речь идет о Collection.

Код

Option Explicit

Private Sub Command1_Click()
Dim col As New Collection
Dim item As Variant
Dim i As Long

'Добавление элементов в коллекцию
    col.Add "item1", "key1"
    col.Add "item2", "key2"
    col.Add "item3", "key3"

'Проход по коллекции    
    For i = 1 To 3
        Debug.Print col(i)
    Next
    
'Другой вариант прохождения по коллекции    
    For Each item In col
        Debug.Print item
    Next
        
End Sub
 

Автор: FloodF 17.4.2006, 21:39
Да коллекция проходится, но key я так и не получаю :(
Пишу:
Код

Dim i As Integer
Dim item As Variant

On Error Resume Next
    var.Add "item1", "key1"
    var.Add "item2", "key2"
    var.Add "item3", "key3"

' Эти два цикла не работают
For i = 0 To var.Count - 1
    MsgBox (var(i).Name)
Next
For Each item In var
    MsgBox (item.Name)
Next

' А эти циклы выводят "item1", "item2".....
For i = 1 To var.Count
    MsgBox (var(i))
Next
For Each item In var
    MsgBox (item)
Next


:(((

Автор: boevik 18.4.2006, 07:36
FloodF, невозможно из коллекции напрямую получить key.
Можно проверить или существует определенный key, или пробежать по всем значениям.

Как выход, можно в коллекцию добавлять класс.
Пример:

Код

'класс myStruct
Option Explicit

Public key As String
Public value As String


Код

'Форма использущая класс myStruct
Option Explicit

Private Sub Command1_Click()
Dim col As New Collection
Dim dummy As myStruct

    Set dummy = New myStruct
    dummy.key = "key1": dummy.value = "item1"
    col.Add dummy, dummy.key
    
    Set dummy = New myStruct
    dummy.key = "key2": dummy.value = "item2"
    col.Add dummy, dummy.key
    
    Set dummy = New myStruct
    dummy.key = "key3": dummy.value = "item3"
    col.Add dummy, dummy.key
    
Dim item As Variant
    
    For Each item In col
        Debug.Print item.key
    Next
    
End Sub

 

Автор: Akina 18.4.2006, 11:58
Цитата(FloodF @  17.4.2006,  22:39 Найти цитируемый пост)
Да коллекция проходится, но key я так и не получаю smile

А определение переменной var мы когда-нить увидим? а? 

Автор: FloodF 19.4.2006, 22:09
Цитата
А определение переменной var мы когда-нить увидим? а?

Ну я описал на верху определение как мог.
boevik спасибо, разобрался! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)