Динамическое создание контролов

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

Динамическое создание контролов

Сообщение mar_val » 14.09.2005 (Ср) 13:31

Только не ругайтесь, что тема заезжена. :wink:
Требуется: Создать, удалить, снова создать, ... несколько элементов на форме
Нашел тут на форуме описание того как это создать. Попытался воссоздать, вот что получилось:
Код: Выделить всё
Dim FormControls() As Object
...
Private Sub Adjust_Form(step)
...
    ReDim FormControls(4)
    Dim tControl As Object

    Set tControl = Controls.Add("VB.Label", tControl)

        tControl.Visible = True
        tControl.Move 0, 0
        tControl.Enabled = True
       
    Set FormControls(1) = tControl
...


При исплонении возникает ошибка 13 "Несовпадение типов" в строке
Код: Выделить всё
Set tControl = Controls.Add("VB.Label", tControl)

Где ошибка?

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

Сообщение RayShade » 14.09.2005 (Ср) 13:36

DNA?

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 14.09.2005 (Ср) 13:53

RayShade
Едва ли ;)

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 14.09.2005 (Ср) 13:55

Пример взят отсюда: http://bbs.vbstreets.ru/viewtopic.php?t=15288

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 14.09.2005 (Ср) 14:35

Да, гоню уже - кавычки-то забыл... Первый вопрос снят
Но почему контрол не отображается? (Caption задал, чтобы не думали что отображается пустой лейбл)
И как разместить этот новый элемент на фрейм присутствующий на форме?

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

Сообщение Amed » 14.09.2005 (Ср) 14:53

DNA, DNA.

Код: Выделить всё
With Me
    .Controls.Add("vb.label", "newlabel").Visible = True
    .Controls("newlabel").Caption = "sss"
    .Controls("newlabel").Move 0, 0
    .Controls("newlabel").Enabled = True
End With

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

Сообщение Amed » 14.09.2005 (Ср) 14:58

Код: Выделить всё
    Set .Controls("newlabel").Container = .Frame1

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 14.09.2005 (Ср) 16:32

Amed
Спасибо!

Логичное продолжение темы - как добавить обработчики событий на этих контролах?
И второе - как можно получить список контроллов формы?

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 14.09.2005 (Ср) 18:31

Please help!

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

Сообщение Amed » 14.09.2005 (Ср) 18:41

1. Хуки.
2. Смотри коллекцию Controls.

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

For Each A In Controls
    MsgBox A.Name
Next

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 14.09.2005 (Ср) 18:49

Amed
Да, спасибо. Коллекцию именно и смотрю.
А как с хуками работать? Точнее говоря, как их создавать в данном конкретном случае?

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 14.09.2005 (Ср) 19:23

Amed
Возможно ли поставить обработчик события на контрол, а не на окно. Или единственный вариант - вешать хук на окно и по позиции мыши определять где было нажато?

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

Сообщение Amed » 14.09.2005 (Ср) 19:33

То, что имеет hwnd - окно в широком смысле слова.

Значит, хуки можно ставить на CommandButton'ы, PictureBox'ы, ComboBox'ы и т.д.
Если же надо проверить клик на Label'е, скажем, то Вы сказали правильно. Надо вешать хук на окно и по позиции мыши определять где было нажато.

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 15.09.2005 (Чт) 12:58

Вот и мне интересно стало если я заранее на пишу обработчик событиz

типа newlabel_click(Index as integer)

и потом буду создавать метки с названием newlabel и новым индексом
по идее должно такое работать без хуков?

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

Сообщение Amed » 15.09.2005 (Чт) 13:03

Да.


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

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

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

    TopList  
cron