Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 410
от 19.11.2006, 11:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 211, Экспертов: 24
В номере:Вопросов: 1, Ответов: 3


Вопрос № 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

Возможно есть другой способ, подскажите пожалуйста?
Отправлен: 14.11.2006, 11:01
Вопрос задал: Васильков Николай Петрович (статус: Специалист)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Александр Шевченко
Здравствуйте, Васильков Николай Петрович!
Нужно использовать массив чекбоксов. Делается так: создаете на форме чекбокс (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 возвращает ложь. С кнопками, например, все нормально, а вот с флажками - такая ерунда творится. Но выход, как видно есть (приходится сравнивать по имени класса) и без использования массивов контролов.
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (мь!тарь) (статус: Студент)
Ответ отправлен: 18.11.2006, 15:46


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное