Массив объектов, например TextBox, Общий обработчик события

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

Массив объектов, например TextBox, Общий обработчик события

Сообщение CAPITALIST » 12.11.2009 (Чт) 9:14

Как создать массив объектов и обращаться к ним, например
TextBox(1).Text
тем самым можно перебрать объекты в цикле, использовать один обработчик события.

И еще: как явно указать/сменить обработчик события?

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

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение alibek » 12.11.2009 (Чт) 9:24

Свойство Index.
Lasciate ogni speranza, voi ch'entrate.

CAPITALIST
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 02.11.2009 (Пн) 14:56

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение CAPITALIST » 12.11.2009 (Чт) 12:19

Хм. Интересно, что это свойство доступно только в коде, и то его нет в выпадающем списке свойств/методов. Да и это не то (как я понял из справки по ВБ). мне нужно:
For n=1 to UBound(ComboBoxx)
ComboBoxx(n).AddItem
next

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение Денис » 12.11.2009 (Чт) 14:16

CAPITALIST писал(а):Хм. Интересно, что это свойство доступно только в коде, и то его нет в выпадающем списке свойств/методов.

Плохо ищете. Смотрите внимательней.
Изображение
CAPITALIST писал(а):Да и это не то (как я понял из справки по ВБ). мне нужно:
For n=1 to UBound(ComboBoxx)
ComboBoxx(n).AddItem
next

Это то, что вам нужно? Или не то? Или не это? Перефразируйте вопрос. Потому что фрагмент кода рабочий.

Сорри, вот это рабочий код:
Код: Выделить всё
   Dim N As Integer

   For N = 0 To cbArray.Count - 1
      cbArray(N).AddItem "sdfsdfsd"
   Next
Вложения
index.png
index.png (13.57 Кб) Просмотров: 1657
Последний раз редактировалось Денис 12.11.2009 (Чт) 14:27, всего редактировалось 1 раз.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение dr.MIG » 12.11.2009 (Чт) 14:19

В данном примере лучше использовать конструкцию For Each ... In ...
Salus populi suprema lex

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение Денис » 12.11.2009 (Чт) 14:28

dr.MIG писал(а):В данном примере лучше использовать конструкцию For Each ... In ...

For Each? В массиве? КАК? Покажи.
Нет, я понимаю, что если создать элементы через Me.Controls.Add, то удобнее перебирать через For Each. Но массив элементов... Есть же Count.

Кстати, Капиталист, насчет обработчика событий. Напрямую в 6 бейсике это делать нельзя, но есть обходной маневр.
Сначала делаем так:
Dim Withevents EventControl as ТипКонтролa
потом делаем так:
Set EventControl = ArrayControl(НужныйИндекс)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

CAPITALIST
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 02.11.2009 (Пн) 14:56

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение CAPITALIST » 12.11.2009 (Чт) 15:01

А у меня нету
При попытке сменить имя ComboBox1 на ComboBoxx(100) выдает ошибку "Not a legal object name:ComboBoxx(100)"
Вложения
ComboBox.PNG
ComboBox.PNG (14.78 Кб) Просмотров: 1533

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение Денис » 12.11.2009 (Чт) 15:16

CAPITALIST писал(а):А у меня нету
При попытке сменить имя ComboBox1 на ComboBoxx(100) выдает ошибку "Not a legal object name:ComboBoxx(100)"


Я понял! У тебя не VB(Visual Studio), у тебя VBA(Word, Excel, etc.)! Тогда либо через коллекции, либо через Set. Но в любом случае, один обработчик на всех не получится. Рекомендую сделать в обработчиках событий всех требуемых контролов ссылку на одну общую процедуру.

Как-то так:
Код: Выделить всё
Private Sub ComboBox1_Change()
    ComboChange ComboBox1
End Sub

Private Sub ComboBox2_Change()
    ComboChange ComboBox2
End Sub

Private Sub ComboBox3_Change()
    ComboChange ComboBox3
End Sub

Private Sub ComboBox4_Change()
    ComboChange ComboBox4
End Sub

Private Sub ComboChange(Sender As ComboBox)
    Sender.AddItem Sender.Text
End Sub

Кинь на форму четыре комбобокса.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение Хакер » 12.11.2009 (Чт) 15:45

Думай над этим.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение Alec » 12.11.2009 (Чт) 16:38

насчет обработчика
http://bbs.vbstreets.ru/viewtopic.php?f=7&t=40939
кажется, подобное...
Иногда лучше вовремя остановиться...
И начать заново!

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Массив объектов, например TextBox, Общий обработчик события

Сообщение dr.MIG » 12.11.2009 (Чт) 17:52

Денис писал(а):For Each? В массиве? КАК? Покажи.

Я просто имел в виду, что
Код: Выделить всё
Dim N As Integer
For N = 0 To cbArray.Count - 1
    cbArray(N).AddItem "sdfsdfsd"
Next


лучше заменить на

Код: Выделить всё
Dim cb As ComboBox
For Each cb In cbArray
    cb.AddItem "dsdsdsds"
Next
Salus populi suprema lex


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

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

Сейчас этот форум просматривают: AhrefsBot, С.Т. и гости: 13

    TopList