есть ли элемент в коллекции

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
devel
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 19.02.2003 (Ср) 13:38
Откуда: Russia

есть ли элемент в коллекции

Сообщение devel » 27.03.2003 (Чт) 11:11

Господа, есть коллекция, например коллекция свойств контрола. Вопрос: можно ли программно без генерации ошибки определить есть ли элемент в коллекции? Можно, конечно, тупым перебором всех свойств, но может быть есть более лаконичный способ?

Заранее спасибо!
Devel

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 27.03.2003 (Чт) 11:16

Нет нельзя.

Colonel
Обычный пользователь
Обычный пользователь
 
Сообщения: 63
Зарегистрирован: 15.11.2002 (Пт) 12:39
Откуда: Russia

Сообщение Colonel » 27.03.2003 (Чт) 14:03

Попробуй вот такой вариант - несколько коряво но в случае коллекции вроде должен работать

Function IsInCollection(checkCollection As Collection, checkKey As String) As Boolean
Dim returnVal
IsInCollection = True
On Error GoTo errlab:
returnVal = checkCollection(checkKey)
Exit Function
errlab:
IsInCollection = False
End Function

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 27.03.2003 (Чт) 14:33

Вообщето проще использовать Dictionary
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Colonel
Обычный пользователь
Обычный пользователь
 
Сообщения: 63
Зарегистрирован: 15.11.2002 (Пт) 12:39
Откуда: Russia

Сообщение Colonel » 27.03.2003 (Чт) 14:51

Sebas писал(а):Вообщето проще использовать Dictionary

Спасибо за совет - раньше не знал про Dictionary!

devel
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 19.02.2003 (Ср) 13:38
Откуда: Russia

Сообщение devel » 27.03.2003 (Чт) 18:43

Dictionary - это конечно хорошо, но как это можно использовать когда у меня коллекция, скажем, control.properties?

Проверка чего-либо методом генерации ошибки - метод достаточно универсальный. Только у него есть минус. Скажем, отлавливается реальная ошибка, а в процедурах стоит инструкция On Error. Как тогда понять, на какой строке кода сбоит? Можно закомментить On Error, но проще поставить Break On All Errors в опциях редактора VB. Но тогда он будет прерываться на всех ошибках. Поэтому я предпочитаю писать код так, чтобы ошибки не генерились. :lol:
Devel

sanches
El compa&#241;ero
El compa&#241;ero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 27.03.2003 (Чт) 19:18

насамом деле, отлавливание ошибок - это целое искусство :) Чтобы определить, где ошибка в данном случае ловите ошибку 5. А вообще для определнеия места ошибки я юзаю "индекс" - в ключевых местах процедуры присваеваешь иму определенной значение, а в обработке ошибки проверяешь его
Изображение

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 27.03.2003 (Чт) 20:44

Тогда так

Function IsInCollection(checkCollection As Collection, checkKey As String) As Boolean
Dim X as Object

For Each x In checkCollection

if x.Name=checkKey then
sInCollection=True
Exit Function
end if

End Function
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

sanches
El compa&#241;ero
El compa&#241;ero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 27.03.2003 (Чт) 20:49

http://bbs.vbstreets.ru/viewtopic.php?t=264
я там сделал так - есть класс, у кот. два св-ва Name и Value - при добавлении в набор указываются оба, а Name плюс к тому еще используется как ключ. Тогда то, что предлагает Sebas как раз тут и подойдет
Изображение

Colonel
Обычный пользователь
Обычный пользователь
 
Сообщения: 63
Зарегистрирован: 15.11.2002 (Пт) 12:39
Откуда: Russia

Сообщение Colonel » 28.03.2003 (Пт) 7:07

Да, в VB-6 работа с ошибками конечно оставляет желать лучшего!
Жаль что нет такой нужной конструкции как
try
catch
многие бы вопросы снялись :)
а так шаманить приходиться :)

devel
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 19.02.2003 (Ср) 13:38
Откуда: Russia

Сообщение devel » 28.03.2003 (Пт) 12:15

То, что предлагает Sebas - разумный и естественный способ. Только, блин, работает не всегда. Я сейчас бьюсь над тем, что в Access у поля есть коллекция свойств. Так вот, вся подлянка в том, что некоторые свойства доступны только в режике конструктора, а некоторые только в режиме просмотра. :-( Таким образом, пробежаться по ВСЕЙ КОЛЛЕКЦИИ пока не получается. :x
Devel


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

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

Сейчас этот форум просматривают: Google-бот и гости: 45

    TopList