Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вытащить из коллекции значение "key"?? 
V
    Опции темы
FloodF
Дата 16.4.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



Пишу на VB6
У меня коллекциия "var" содержащая переменные которые поступают туда в процессе выполнения программы.
Добавляю item: "var.Add значение_переменной, название_переменной" (название идет за ключ)
обращаюсь к этой базе есстественно так:
var.Item(название_переменной) и она возвращает значение. И все отлично работает! Но возникла проблема при сохрании:
я могу вытащить из этой базы значение но не могу название (key)! Подскажите пожалуйста как это сделать!
PM MAIL   Вверх
Akina
Дата 17.4.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Код

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 17.4.2006, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



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

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


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 17.4.2006, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(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 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 17.4.2006, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Насколько я понимаю, речь идет о 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
 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
FloodF
Дата 17.4.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



Да коллекция проходится, но 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


:(((
PM MAIL   Вверх
boevik
Дата 18.4.2006, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



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

 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 18.4.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



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

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FloodF
Дата 19.4.2006, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



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

Ну я описал на верху определение как мог.
boevik спасибо, разобрался! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1341 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.