Можно ли, а если можно, то как:
В VBA CorelDraw 13 создать динамический массив элементов управления.
Он не поддерживает индексированные элементы управления, как VB.
Метод Add позволяет создать любое кол-во элементов, но они не отслеживают событий.
Может можно как-то заставить?
Если через WithEvents, то реагирует только последний элемент.
Писать заранее кучу WithEvents, и кучу событий к ним - нереально.
У меня читаются однотипные пакты данных из файла и я не знаю заранее, сколько их будет
Можно, конечно, отлеживать событи мыши в разных частях формы,на которой нарисованы псевдоэлементы, но это не удобно по ряду причин.
- Код: Выделить всё
Dim comArray() As CommandButton
Dim WithEvents comWithEvents As CommandButton
Private Sub CommandButton1_Click() '' äèíàìè÷åñêèé ìàññèâ êíîïîê
Dim i As Long, ii As Long
ii = 5
ReDim comArray(1 To ii)
For i = 1 To ii
Set comArray(i) = Controls.Add("Forms.CommandButton.1", "comArray_" & (i), True)
With comArray(i)
.Left = 0: .Top = i * 20
.Width = 100: .Height = 20
.Caption = "Êíîïêà " & comArray(i).Name
End With
Next i
End Sub
Private Sub comArray_Click() ''ñîáûòèå äëÿ êíîïêè comArray
MsgBox "Ok"
End Sub
Private Sub CommandButton2_Click() '' ìíîãîêðàòíîå äîáàâëåíèå
Dim i As Long, ii As Long
ii = 5
For i = 1 To ii
Set comWithEvents = Controls.Add("Forms.CommandButton.1", "comWithEvents_" & (i), True)
With comWithEvents
.Left = 100: .Top = i * 20
.Width = 100: .Height = 20
.Caption = "Êíîïêà " & comWithEvents.Name
End With
Next i
End Sub
Private Sub comWithEvents_Click() ''ñîáûòèå äëÿ êíîïêè comWithEvents
MsgBox "Ok"
End Sub