Как динамически добавить кнопку

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Как динамически добавить кнопку

Сообщение CORBA » 08.12.2004 (Ср) 2:26

Поискал на форуме, но так и не нашёл ответа вот на такой вопрос:
Как динамически добавить кнопку(контрол) на форму?
Когда я, хотя бы одну кнопку создаю вручную, и пишу код так:

load cmdButton(3)
cmdButton(3).visible=true
то всё прекрасно работает,

но когда хочу чтобы всё создавал код
dim cmdA as CommandButton
load cmdA
cmdA.visible=true

то выскакивает след. ошибка:
Object variable or With block variable not set

Подскажите plz чё делать, а то совсем запутался

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 08.12.2004 (Ср) 8:29

Попробуй так:
Код: Выделить всё
Public WithEvents objExt As VBControlExtender
Private Sub Form_Load()
Set cmdA = Controls.Add("VB.CommandButton", "cmdA")
cmdA.Visible = True
End Sub
الفيجوال بيسك الرابح

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 08.12.2004 (Ср) 17:41

Работает :), но чутарь не подходит, мне нужно создать массив контролов динамически. Возможно ли это сделать?

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 08.12.2004 (Ср) 19:06

Не, без кнопочки, созданной в редакторе и призванной быть первым элементом массива, стандартными средствами VB не сделать как ты хочешь.. :wink:
Так что, сначала на форму Command1 с Index'ом 0, а потом грузи все остальное. Ну а можешь через API делать все, тока оно тебе надо :? ?

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 10.12.2004 (Пт) 0:52

to xolod
я понял что не надо :)
Спасибо что просвятил, а то много времени и сил убил в поисках ответа - можно или нет.

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 10.12.2004 (Пт) 8:35

... стандартными средствами VB не сделать ...

Да ну, можна сделать:
Код: Выделить всё
Private objExt() As CommandButton
Private Sub Form_Load()
ReDim objExt(1 To 10)
Set objExt(1) = Controls.Add("VB.CommandButton", "objext1")
objExt(1).Visible = True
End Sub

Работает с массивом. Только события не отлавливает. Можно конешно сделать класс обертку, но легче все же сделать Command1 с Index'ом 0.
الفيجوال بيسك الرابح

Rombo
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 12.12.2004 (Вс) 22:21
Откуда: москва

Сообщение Rombo » 12.12.2004 (Вс) 23:17

Я весь день бьюсь, никак не могу в VBA допиться чтобы обрабатывались события динамически созданных объектов
Задача простая: динамически накидать несколько кнопочек с надписями, и чтобы по нажатию на них я знал какая отправила событие.
на форуме вычитал несколько способов, но не один не получился...
объясните мне, ламеру как мне реализовать задачу

1) через Load CommandButton1 (пишет не могу Load или Unload объект)
2) через Controls.Add (добавляются компаненты в массив наура! а вот как события из словить я не разобрался)
3) суть шайтанского метода "обертка" так и не понял...

да и на форуме не нашел хорошего описания КАК это на VBA реализовать ?? помогите ламеру, а то весь день бьюсь бошкой об пол
:bounce: :bounce:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.12.2004 (Пн) 4:21

private withevents cb as commandbutton
...
set cb=controls.add("какое там полное имя", "cb1")
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rombo
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 12.12.2004 (Вс) 22:21
Откуда: москва

Сообщение Rombo » 13.12.2004 (Пн) 16:04

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

Код: Выделить всё
Public WithEvents CommandButton1 As CommandButton
Public WithEvents CommandButton2 As CommandButton
.....
Public WithEvents CommandButton25 As CommandButton

Private Sub CommandButton1_Click()
MyButtonClick (1)
End Sub
.....
Private Sub CommandButton25_Click()
MyButtonClick (25)
End Sub


private sub MyButtonClick(index as integer)
'обработка события
End Sub

но это же ерунда полная с точки зрения правильность программирования!!
пользуясь возможностью доступа к тексту скрипта в VBA можно жобавлять эти строчки в код динамически, но это тоже фигня

единственное что я не попробовал - это обертка.. суть этого метода мне до конца не понятна, Помогите мне, пожалуйста разобраться в нем на этом простом примере!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.12.2004 (Пн) 16:42

Ну, жобавляй строчки в код динамически :lol:
Изображение

Rombo
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 12.12.2004 (Вс) 22:21
Откуда: москва

Сообщение Rombo » 13.12.2004 (Пн) 19:20

tyomitch, ключевая фраза в моем посте
Rombo писал(а):это обертка.. суть этого метода мне до конца не понятна, Помогите мне, пожалуйста разобраться в нем на этом простом примере!

:wink: а жобавлять строчки динамически это очень студно в в плане отладке, может получится много ошибок

Rombo
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 12.12.2004 (Вс) 22:21
Откуда: москва

Сообщение Rombo » 17.12.2004 (Пт) 4:20

ну примерно столько же сколько в моем прошлом посте :roll: :oops: :lol:

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 17.12.2004 (Пт) 9:03

الفيجوال بيسك الرابح

Rombo
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 12.12.2004 (Вс) 22:21
Откуда: москва

Сообщение Rombo » 17.12.2004 (Пт) 12:36

ага! вот его то я как раз не понял =)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 17.12.2004 (Пт) 13:02

Чаво объяснить? ;)

Фишка в том, что стандартную кнопку расширяем, добавляя к ней ее индекс и ссылку на специальный объект, от которого будем ловить события в форме...
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)


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

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

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

    TopList  
cron