обращение к однотипным элементам

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

обращение к однотипным элементам

Сообщение nat-z » 20.11.2006 (Пн) 16:01

Рассказываю все заново и доходчиво
На форме есть какое-то количество однотипных элементов (LABEL или что - не важно) с именами LABELi (i от 1 донапример 20).
В зависимости от внешних данных мне нужно сделать например xxx.LABEL1.visible= true
xxx.LABEL1.caption = "qqqq"
для каких-то элементов

Допустим в текст перем ttt я сформировала "xxx.LABEL1.caption", в qqq сформировала текст. А как выглядит сам оператор присвоения (что-то вроде &ttt = &qqq в Clipper).

Теперь доходчиво?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 20.11.2006 (Пн) 16:05

А что мешало создать массив контролов? Они бы все имели одно имя, а различались индексом...
А я все практикую лечение травами...

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

Re: обращение к однотипным элементам

Сообщение alibek » 20.11.2006 (Пн) 16:05

nat-z писал(а):Теперь доходчиво?

Почему-то такой тон не вызывает желания отвечать.
Но все-же советую оценить коллекцию Controls или метод CallByName.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Konst_One » 20.11.2006 (Пн) 16:06

еще раз объясняю доходчиво: создайте массив своих однотипных элементов Label, указав у первого свойство Index=0, затем вы сможете к ним обращаться по индексу:

Код: Выделить всё
Dim i as Integer

For i=0 to Ubound(MyLabel)
MyLabel(i).Caption="Всем сразу эту строку!"
Next

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 20.11.2006 (Пн) 16:31

Konst_One писал(а):еще раз объясняю доходчиво: создайте массив своих однотипных элементов Label, указав у первого свойство Index=0, затем вы сможете к ним обращаться по индексу:

Код: Выделить всё
Dim i as Integer

For i=0 to Ubound(MyLabel)
MyLabel(i).Caption="Всем сразу эту строку!"
Next

Спасибо. А если все-таки без индексов?

Есть ttt1 = "xxx.label.caption" и ttt2 = "aaaaa"
Как сделать присвоение?
Мне такое может понадобиться!!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 20.11.2006 (Пн) 16:33

Перебор коллекции Controls, как уже сказал Алибек...
А я все практикую лечение травами...

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Re: обращение к однотипным элементам

Сообщение nat-z » 20.11.2006 (Пн) 16:40

alibek писал(а):
nat-z писал(а):Теперь доходчиво?

Почему-то такой тон не вызывает желания отвечать.
Но все-же советую оценить коллекцию Controls или метод CallByName.

А можно было бы просто название темы заменить, тем более тут не так просто назвать!!
А у меня инет очень медленный - я полчаса плакала и заново все набирала!!!
оценить коллекцию Controls или метод CallByName - чтобы заценить - надо знать, что это такое. И где его искать - в Гугле?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 20.11.2006 (Пн) 16:47

Для начала можно нажать F2 в IDE бейсика и посмотреть там. :wink:
А я все практикую лечение травами...

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 20.11.2006 (Пн) 16:52

Dim i as Integer

For i=0 to Ubound(MyLabel)
MyLabel(i).Caption="Всем сразу эту строку!"
Next

А что такое - Ubound(MyLabel) ?
Перебор коллекции Controls - а где это найти?

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

Сообщение Konst_One » 20.11.2006 (Пн) 16:58

бес попутал :D

Код: Выделить всё
For i = 0 To MyLabel.Count - 1

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

Сообщение Konst_One » 20.11.2006 (Пн) 17:03

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

For Each ctl In Me.Controls
    If TypeOf ctl Is Label Then
        ctl.Caption = "Новое название"
    End If
Next

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

Сообщение alibek » 20.11.2006 (Пн) 17:15

Konst_One писал(а):бес попутал :D

Ну не так уж, чтобы совсем попутал.
MyLabel.UBound тоже можно использовать.
Lasciate ogni speranza, voi ch'entrate.

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 20.11.2006 (Пн) 17:23

For i = 0 To MyLabel.Count - 1 - это понятно
For Each ctl In Me.Controls - а что это такое или опять надо мной смеяться?

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

Сообщение Konst_One » 20.11.2006 (Пн) 17:33

Me.Controls

подразумевается, что ваш код находится внутри модуля вашей формы, где расположены указанные вами контролы

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 21.11.2006 (Вт) 0:42

Twister писал(а):Для начала можно нажать F2 в IDE бейсика и посмотреть там. :wink:

Нажала F2 и поиск по Controls.
Там: Library, Class, Member.
И что и где мне там искать?

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 21.11.2006 (Вт) 0:44

Konst_One писал(а):Me.Controls

подразумевается, что ваш код находится внутри модуля вашей формы, где расположены указанные вами контролы


А где он на самом деле находится? И какие контролы я должна указать?

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

Сообщение Konst_One » 21.11.2006 (Вт) 12:16

Me - это класс твоей текущей формы
Controls - коллекция всех контролов данной формы

что еще не понятно :?:

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

Сообщение RayShade » 21.11.2006 (Вт) 12:19

Me это не класс, а ссылка на экземпляр объекта класса :)

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

Сообщение Konst_One » 21.11.2006 (Вт) 13:30

мы же для начинающих объясняем , а не для профессионалов :D
Me - это просто текущая форма, простым человеческим языком

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 21.11.2006 (Вт) 17:01

Konst_One писал(а):Me - это класс твоей текущей формы
Controls - коллекция всех контролов данной формы

что еще не понятно :?:

Все остальное непонятно!
Набрала Me.Controls и ".", а никакие подсказки не высветились!!
Как его можно использовать или посмотреть? И что такое контролы - это подпрограммы?
Вы только не смейтесь и потерпите до выходных! А я тогда в город съезжу и книжку какую куплю!
И у меняеще там рядом вопросы - я уже боюсь все в одну тему ложить, опять ругаться будут!

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

Сообщение Konst_One » 21.11.2006 (Вт) 17:14

Controls - это коллекция (Collection) объектов типа Control
т.е. в ней содержатся все твои контролчики , которые у тебя на форме: Label, Command, TextBox, Combo и тд и тп

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 21.11.2006 (Вт) 17:21

Konst_One писал(а):Controls - это коллекция (Collection) объектов типа Control
т.е. в ней содержатся все твои контролчики , которые у тебя на форме: Label, Command, TextBox, Combo и тд и тп


И как все это увидеть и использовать?
Что мне это даст?

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

Сообщение Konst_One » 21.11.2006 (Вт) 17:27

см мои посты ранее, я предложил вам два варианта работы:
1. сделать массив ваших Label
2. использовать коллецию Controls

за вами остался выбор и реализация :wink:

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 22.11.2006 (Ср) 0:56

Konst_One писал(а):см мои посты ранее, я предложил вам два варианта работы:
1. сделать массив ваших Label
2. использовать коллецию Controls

за вами остался выбор и реализация :wink:


А что значит использовать коллекцию? Как ее создать? Какая-то кнопка для этого?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 22.11.2006 (Ср) 1:06

Вот наводящий код :)

Код: Выделить всё
Private Sub Form_Load()
Dim Ctl As Control

For Each Ctl In Controls
    MsgBox Ctl.Name

    If Ctl.Name="MyLabel" Then Ctl.Caption="Working!!!"
Next Ctl
End Sub


Киньте на форму пару контролов и запустите.

UPD: MsgBox, а не MessageBox, конечно!
Последний раз редактировалось Amed 22.11.2006 (Ср) 10:06, всего редактировалось 1 раз.

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Сообщение nat-z » 22.11.2006 (Ср) 1:11

Amed писал(а):Вот наводящий код :)

Код: Выделить всё
Private Sub Form_Load()
Dim Ctl As Control

For Each Ctl In Controls
    MessageBox Ctl.Name
Next Ctl
End Sub


Киньте на форму пару контролов и запустите.


Что значит контролов? Просто всяких комбобох и прочего?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 22.11.2006 (Ср) 1:33

nat-z, именно так.

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

Сообщение Хакер » 22.11.2006 (Ср) 3:53

Только не
Код: Выделить всё
MessageBox Ctl.Name


а
Код: Выделить всё
MsgBox Ctl.Name


Amed, с чего ты взял что у него там эта API задекларированна?
_________________
Мой вариант наводящего кода:
Код: Выделить всё
Private Sub Form_Load()
Dim Ctl As Control

For Each Ctl In Controls
    MsgBox Ctl.Name + " это контрол класса " + TypeName(Ctl)
Next Ctl
End Sub

ЗЫ. Накидай на форму кучу всяких контроллов (комбобоксов, лайнов, кнопок, шейпов, таймеров, хоть чего...) и дай им любые имена. Потом запусти.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение Antonariy » 22.11.2006 (Ср) 10:08

Хакер писал(а):Amed, с чего ты взял что у него там эта API задекларированна?
nat-z писал(а):Набрала Me.Controls и ".", а никакие подсказки не высветились!!
Телепатия все-таки штука ненадежная. :wink:
Лучший способ понять что-то самому — объяснить это другому.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 22.11.2006 (Ср) 10:09

Хакер, все верно. Машинально написал с какой-то стати (притом, что MessageBox в вб вообще не использую). Поправил пост.

nat-z, хинт: нужные контролы можно отличать по префиксу имени.

След.

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

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

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 97

    TopList