0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 18
|
|
1 | |
Как добавить в цикле динамически несколько кнопок и повесить на каждую событие?27.07.2006, 17:23. Показов 3186. Ответов 12
Метки нет (Все метки)
День добрый... В Vb я новичек... Использую VB 6.3. Как можно добавить динамически в цикле несколько кнопок на форму и привязать к ним события на onklick???? Я делал вот так
'------------------------------------------------------------------ Private WithEvents Mycmd As CommandButton Private Sub UserForm_Initialize() Dim index As Integer For index = 0 To 3 Set Mycmd = Frame1.Controls.Add("Forms.CommandButton.1", "b" & Index + 1) Mycmd.Left = 144 Mycmd.Top = 70 + Index * 22 Mycmd.Width = 36 Mycmd.Height = 18 Mycmd.Visible = True Mycmd.Caption = "Open" Next index End Sub Private Sub Mycmd_Click() MsgBox "This is New Button" End Sub '------------------------------------------------------------------ Кнопки добавляются, но событие нажатия срабатывает, только когда кликаешь на последнюю добавленную кнопку... что нужно добавить, чтобы событие нажатия срабатывало для всех кнопок???
0
|
27.07.2006, 17:23 | |
Ответы с готовыми решениями:
12
Как на несколько кнопок повесить одно событие Повесить событие на несколько кнопок Можно как - нибудь добавить динамически несколько кнопок? Подписать на событие несколько кнопок в цикле |
0 / 0 / 0
Регистрация: 04.03.2008
Сообщений: 250
|
|
28.07.2006, 16:53 | 2 |
Ну, навскидку, первое, что пришло в голову:
Объявить объектную переменную типа CommandButton, причем WithEvents, наверное, в виде массива, заранее создать обработку соответствующего события, а при создании кнопок присваивать их этой переменной. Должно работать.
0
|
Insolent
|
|
29.07.2006, 02:13 | 3 |
есть способ попроще, для начинающих - самое то:
в DesignTime(т.е. пока прога ещё не запущена) рисуешь на форме кнопку(пусть будет Command1), свойство index делаешь 0, visible - false. потом в коде, где тебе надо пишешь: load Command1(1) Command1(1).caption = "Динамическая кнопка" Command1(1).visible = true потом load Command1(2) и т.д... Если ты посмотришь обработчик событий для этой кнопки (Command1_Click), то увидишь, что теперь там есть ещё переменная index, куда кладётся номер нажатой кнопки, т.е. типа такого: Private Sub Command1_Click(Index as integer) if Index = 1 then MsgBox "Нажата кнопка 1" if index = 2 then MsgBox "Нажата кнопка 2" End Sub уничтожаются данные кнопки коммандой unload Command1(1) и т.д., короче ты понял |
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 18
|
|
29.07.2006, 15:10 [ТС] | 4 |
Да с индексом конечно прикольно было бы) Это тоже, первое что пришло мне в голову, только в VB 6 нет такого, по крайней мере у меня )
0
|
Insolent
|
|
29.07.2006, 23:49 | 5 |
Нет, есть, держи пример
|
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 18
|
|
31.07.2006, 14:48 [ТС] | 6 |
Спасибо за пример ... Но дело в том, что тот VB с которым я имею дело встроен в студию ARCMAP, и там у контролов нету свойства Index...
0
|
0 / 0 / 0
Регистрация: 04.03.2008
Сообщений: 250
|
|
31.07.2006, 19:19 | 7 |
Так индекс - это не свойство. Это порядковый номер в массиве. Что-то не верится, что массивы элементов не поддерживаются.
0
|
0 / 0 / 0
Регистрация: 04.03.2008
Сообщений: 250
|
|
31.07.2006, 19:24 | 8 |
Массив проще всего сделать так - создать кнопку, по имени, например, cmdButton, затем скопировать ее в буфер и вставить на ту же форму. Последует вопрос, что-то наподобие "Элемент с таким именем уже существует, хотите создать массив?" Говорим да, и получаем массив кнопок с именем cmdButton и индексами 0 и 1. То есть будут две кнопки, cmdButton(0) и cmdButton(1). Кнопку с индексом 1 можно удалить, останется массив из одной кнопки с индексом 0. А уж с этим массивам можно работать: Load, Unload и прочее.
0
|
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 18
|
|
02.08.2006, 15:13 [ТС] | 9 |
Как это так? Разве не создастся кнопка со следующем уникальным именем? Если есть на форме CommandButton1, то скопировав ее в буфер и вставив на форму получим автоматически CommandButton2 и.т.д
0
|
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 18
|
|
02.08.2006, 16:44 [ТС] | 10 |
а без индекса никак нельзя сделать?
0
|
0 / 0 / 0
Регистрация: 04.03.2008
Сообщений: 250
|
|
03.08.2006, 14:56 | 11 |
А что, тем способом, что я описал, не удалось создать массив кнопок? Что-то не верится. Можно, наверное, и без массива кнопок, хотя с ним проще всего.
0
|
Insolent
|
|
05.08.2006, 05:55 | 12 |
между прочем, в VBA действительно отсутствуют индексы как класс сегодня проверил на Ворде. Можно создавать массив, но без преффикса WithEvents...за одну только декларацию private sub Command1_Click(index as integer) среда ругается, как ненормальная.......короче фтопку VBA единственное что тут можно поделать это туева хуча кнопок и обработчиков.....фтопку
|
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 18
|
|
14.08.2006, 14:46 [ТС] | 13 |
да нет на самом деле не все так плохо ) Индексов действительно нет, но можно реализовать через дополнительный класс, где и будут описаны реакции на события... если кому надо могу выкинуть простенький код, как это реализовать... Хотя код похож на танцы с бубном вокруг костра )
0
|
14.08.2006, 14:46 | |
14.08.2006, 14:46 | |
Помогаю со студенческими работами здесь
13
Как повесить событие на динамически формируемую ссылку Повесить динамически добавленную на кнопку событие Как добавить событие перемещения мыши на динамически создаваемую форму Добавить событие в динамически создаваемый элемент Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |