Вопрос № 62564: Здравствуйте.
Суть вопроса такова:
Есть форма(VB_6 Word XP), на форме есть много(предположим 30 штук, но значение может меняться) объектов CheckBox( CheckBox1, CheckBox2, CheckBox3, и т.д.).
Вопрос: как перебрать все эти CheckBox'ы в цик...
Вопрос № 62.564
Здравствуйте.
Суть вопроса такова:
Есть форма(VB_6 Word XP), на форме есть много(предположим 30 штук, но значение может меняться) объектов CheckBox( CheckBox1, CheckBox2, CheckBox3, и т.д.).
Вопрос: как перебрать все эти CheckBox'ы в цикле? Как показано ниже не получается, возможно дело в переменной i, какого она должна быть типа?
For i=1 to 30
CheckBox & i.caption="Тест"
next i
Возможно есть другой способ, подскажите пожалуйста?
Отвечает: Александр Шевченко
Здравствуйте, Васильков Николай Петрович!
Нужно использовать массив чекбоксов. Делается так: создаете на форме чекбокс (CheckBox1), ставите у него свойство Index=0. Далее подгружаем остальные:
Load CheckBox1(1)'1 - индекс для следующего чекбокса
CheckBox1(1).Left=...
CheckBox1(1).Top=...
CheckBox1(1).Visible=True
При необходимости можно выгрузить его так:
Unload CheckBox1(1)
Перебираем в цикле так:
For i=0 to 3
CheckBox1(i).Value=vbChecked
Next
Обработка событий такая же, только в параметре Index получим индекс чекбокса, для которого произошло событие. Удачи!
--------- Вместо внутренней почты лучше стучитесь в аську - 299739804
Ответ отправил: Александр Шевченко (статус: Студент)
Ответ отправлен: 14.11.2006, 11:11 Оценка за ответ: 5 Комментарий оценки: Спасибо, долго мучился, кода на 3 экрана написал кучу литературы перерыл и никак не найти ответ было, а в конце ещё вся работа медным тазиком накрылась, когда ворд в процессе сохранения завис и соответственно всё потерял. Поэтому было принято решение идти спать, как говорят утро вечера мудренее. Ещё раз огромное спасибо.
Отвечает: Tossha
Здравствуйте, Васильков Николай Петрович!
Вам необходимо сделать массив элементов. См. приложение
При этом в форме у вас будет сколько-то объектов с одинаковым именем "CheckBox1". У них автоматически появится свойство Index и в дальнейшей работе с ними вам нужно будет учитывать, что при любом событии CheckBox-а в качестве параметра в процедуру будет передаваться индекс элемента, по которому вы сможете узнать с каким элементом имеете дело
Приложение:
Ответ отправил: Tossha (статус: 1-ый класс)
Ответ отправлен: 14.11.2006, 21:20
Отвечает: Залетин Виталий Викторович (мь!тарь)
Здравствуйте, Васильков Николай Петрович!
При нажатии на кнопку можно перебрать все флажки вот так, например:
Private Sub CommandButton1_Click()
Dim c As Control
Static i As Long
For Each c In Me.Controls
If TypeName(c) = "CheckBox" Then
i = i + 1
c.Caption = "Это флажок #" & CStr(i)
c.Value = Not c.Value
End If
Next
End Sub
Хотя и тут не без глюков: у меня Ворд почему-то не хочет видеть видеть флажки как объекты - т. е. сравнение идет так:
If TypeOf c Is CheckBox Then
'Далее по тексту
и всегда TypeOf c возвращает ложь. С кнопками, например, все нормально, а вот с флажками - такая ерунда творится. Но выход, как видно есть (приходится сравнивать по имени класса) и без использования массивов контролов.
--------- Учиться никогда не поздно. Особенно программированию!