колекция контролов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

колекция контролов

Сообщение Sirik » 17.05.2005 (Вт) 15:20

допусти на форме есть несколько котролов CommandButton, причём индексы у них идёт не подрят, а например 0,2,4,6

как прокрутить эти котролы в цикле?

зы. метод:
for i=1 to CommandButton.Count
if ....
next
не подходит, так как индексы не подрят

зы2. по-моему следует использовать for each ... in ... , но это только догадки...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 17.05.2005 (Вт) 15:37

Dim c as Object
For Each c in Form1.Controls
If TypeName(c) = "CommandButton" Then
'Работаем нашли кнопку
EndIf
Next
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 17.05.2005 (Вт) 15:42

это понятно, но если меня интересует имеено массив кнопок COMBUTT
и на форме есть куча других кнопок. данным цикл выдаст все кнопки, которые лежат на форме

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.05.2005 (Вт) 15:44

Создаешь коллекцию colButtons и добавляешь в нее нужные тебе кнопки. Потом работаешь с коллекцией. Чтобы кнопки в коллекции были нужными, проверяешь c.Name.
Последний раз редактировалось alibek 17.05.2005 (Вт) 15:45, всего редактировалось 1 раз.
Lasciate ogni speranza, voi ch'entrate.

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 17.05.2005 (Вт) 15:45

а Можешь и так сделать:

Dim CB as Object
For Each CB in Form1.Controls
If TypeOf is CommandButton Then
'Ну а дальше уже твои добавки (ну, не бульонные конечно)....
End If
Next



ЗЫ: Кажись я опоздал...
Последний раз редактировалось Alex_2005 17.05.2005 (Вт) 15:47, всего редактировалось 1 раз.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 17.05.2005 (Вт) 15:45

Код: Выделить всё
Dim cmd As CommandButton

    For Each cmd In Me.Command1
        Debug.Print cmd.Index
    Next cmd

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 17.05.2005 (Вт) 17:26

А если типа этого, нет VB проверить:
Код: Выделить всё
for n=min to max
  if not COMBTN(n) is Nothing then
    '............
  end if
next n

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

Сообщение tyomitch » 17.05.2005 (Вт) 19:02

Mikle писал(а):А если типа этого, нет VB проверить:
Код: Выделить всё
for n=min to max
  if not COMBTN(n) is Nothing then
    '............
  end if
next n

Не заработает.

А у Konst_One имхо правильнее всех - без пробега по лишним контролам :-)
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.05.2005 (Ср) 8:41

Если массив, то да. А если нужно выбрать все CommandButton? :)
Lasciate ogni speranza, voi ch'entrate.

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 18.05.2005 (Ср) 9:34

Смотри выше уже было написано. :wink:
Код: Выделить всё

Dim CB as Object
For Each CB in Form1.Controls
If TypeOf is CommandButton Then
'Ну а дальше уже твои добавки
End If
Next
Guten Morgen! А если не Guten, то тогда это и не Morgen...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.05.2005 (Ср) 9:45

1. Лучше не As Object, а As Control
2. Правильно было бы добавить еще Select Case CB.Name
Lasciate ogni speranza, voi ch'entrate.

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 18.05.2005 (Ср) 9:55

Слушай, что то я не понял, зачем тебе CB.NAME если тебе нужны все Buttons :?: Или может я что то упустил :?: А на счёт As Control это ты верно заметил. а ещё может даже лучьше As CommandButton.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.05.2005 (Ср) 10:19

As CommandButton нельзя.
А Name затем, если нужны все-таки не все кнопки.
Lasciate ogni speranza, voi ch'entrate.

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 18.05.2005 (Ср) 10:37

объясни тугодуму (если конечно не лень), почему CommandButton нельзя, тебе ведь только кнопки нужны. :roll:
Guten Morgen! А если не Guten, то тогда это и не Morgen...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.05.2005 (Ср) 10:48

Потому что перебираться будут контролы, и ты получишь 13 на первой же некнопке.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 18.05.2005 (Ср) 10:58

о!! Точно!! Вот шо значит недосыпание... :shock:
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 18.05.2005 (Ср) 11:07

alibek
Спасибо за поправки. По коллекциям контролов практически не бегаю. :wink:
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Re: колекция контролов

Сообщение lord0n » 30.06.2005 (Чт) 16:16

Sirik писал(а):допусти на форме есть несколько котролов CommandButton, причём индексы у них идёт не подрят, а например 0,2,4,6

как прокрутить эти котролы в цикле?

зы. метод:
for i=1 to CommandButton.Count
if ....
next
не подходит, так как индексы не подрят

зы2. по-моему следует использовать for each ... in ... , но это только догадки...


а непроще ли сделать так:

for i=1 to CommandButton.Count step 2
if ....
next

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.06.2005 (Чт) 16:23

А не проще ли перечитать посты? Этот вариант ему не подходит.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.06.2005 (Чт) 16:34

Код: Выделить всё
dim x as integer
dim c as Control
on error resume next
for x=Command1.lbound to Command1.ubound
   set c = Command1(x)
   if not c is nothing then
      ...
      set c = nothing
   end if
next x

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.06.2005 (Чт) 16:44

А чем этот код лучше, чем код Konst_One?
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.06.2005 (Чт) 16:49

Тем, что ему пох какие индексы у контролов.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 30.06.2005 (Чт) 16:52

я уже давно решил данную задачу, зачем постить?
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.06.2005 (Чт) 17:01

Antonariy писал(а):Тем, что ему пох какие индексы у контролов.

Пересмотри еще раз его код. Там вообще не используются индексы.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.06.2005 (Чт) 17:08

Пересмотри еще раз его код. Там вообще не используются индексы.


А у меня используются.

допусти на форме есть несколько котролов CommandButton, причём индексы у них идёт не подрят,


copy-paste из первого поста. арфахрафия аффтара сахранена.
Т. е. индексы все-таки есть.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.06.2005 (Чт) 17:12

Ты похоже не смотрел его код.
Код Konst_One перебирает весь массив контролов и при этом вообще не зависит от того, насколько последовательного идут индексы, т.к. в коде индексы не используются. Причем не нужны обработчики ошибок. Советую нарисовать форму с массивом кнопок и прогнать его код под отладчиком.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.07.2005 (Пт) 8:50

Перепутал Konst_One с автором топика. У него действительно правильнее.


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 109

    TopList  
cron