Страницы: 1
RSS
Как вызвать событие с Label, если они созданы программно?
 
У меня на Форме программно создаются несколько Label'ов с данными с листа Экселя.  
Private Sub UserForm_Activate()  
SelPredpr = ActiveCell.Row  
Dim i As Long  
k = 0  
For i = 1 To 25  
   If Worksheets("База").Cells(SelPredpr, i).Value = "" Then k = k + 1: j = i - k: GoTo 1  
   j = i - k  
       With Prosmotr.MultiPage1.Pages(0).Controls.Add("Forms.Label.1")  
           .Caption = Worksheets("База").Cells(1, i).Value  
           .Top = j * 14 - 8  
           .Left = 6  
           .Height = 12  
           .Width = 74  
           '.BorderStyle = 1  
       End With  
       With Prosmotr.MultiPage1.Pages(0).Controls.Add("Forms.Label.1")  
           .Caption = Worksheets("База").Cells(SelPredpr, i).Value  
           .Top = j * 14 - 8  
           .Left = 80  
           .Height = 12  
           .Width = 80  
           '.BorderStyle = 1  
           .AutoSize = True  
           .WordWrap = False  
       End With  
1 Next i  
 
Но мне нужно, чтобы, например, при двойном клике или одинарном клике на созданные Лейблы, копировалось их содержание, т.е. Caption.  
Проблема в том, что я не знаю, как вызвать событие. Если бы Лейблы были созданы изначально на форме мной - нет проблем. А как быть, если Лейблы созданы программно?
 
Вы можете добавить несколько строк в код программно:  
http://www.msoffice.nm.ru/faq/macros/module.htm#faq326  
Но потом их придется удалять...  
Но лучше для этого использовать модуль класса.  
Пример можно посмотреть здесь:  
http://www.planetaexcel.ru/forum.php/tips.php?thread_id=5941
Bite my shiny metal ass!      
 
Вот ещё примеры:  
 
http://www.programmersforum.ru/showpost.php?p=196765&postcount=9  
http://www.programmersforum.ru/showpost.php?p=279872&postcount=8
 
Создаешь класс, назови его, например, MyClassLabel  
 
В классе  
Public WithEvents MyLabel As MSForms.Label  
 
Private Sub MyLabel_Click()  
MsgBox "Сработало событие"  
End Sub  
 
В модуле  
Dim MyLabelMas(256) as MyClassLabel 'это описание массива в самом верху модуля  
 
 
В цикле добавления    
....  
cnt = -1  
.....  
cnt = cnt + 1  
Set MyLabelMas(cnt).MyLabel =  Prosmotr.MultiPage1.Pages(0).Controls.Add("Forms.Label.1")  
 
Set obj =  MyLabelMas(cnt).MyLabel 'вот твой Label делай с ним что хочешь
 
Блин, забыл новый объект создать... вобщем вот  так надо  
 
Создаешь класс, назови его, например, MyClassLabel  
 
В классе  
Public WithEvents MyLabel As MSForms.Label  
 
Private Sub MyLabel_Click()  
MsgBox "Сработало событие"  
End Sub  
 
В модуле  
Dim MyLabelMas(256) as MyClassLabel 'это описание массива в самом верху модуля  
 
 
В цикле добавления    
....  
cnt = -1  
.....  
cnt = cnt + 1  
 
Set MyLabelMas(cnt - 1) = New MyClassLabel  
Set MyLabelMas(cnt).MyLabel = Prosmotr.MultiPage1.Pages(0).Controls.Add("Forms.Label.1")  
 
Set obj = MyLabelMas(cnt).MyLabel 'вот твой Label делай с ним что хочешь
 
{quote}{login=alexeyk}{date=06.08.2009 09:52}{thema=}{post}Блин, забыл новый объект создать... вобщем вот  так надо  
Создаешь класс, назови его, например, MyClassLabel  
В классе  
Public WithEvents MyLabel As MSForms.Label  
Private Sub MyLabel_Click()  
MsgBox "Сработало событие"  
End Sub  
В модуле  
Dim MyLabelMas(256) as MyClassLabel 'это описание массива в самом верху модуля  
В цикле добавления    
....  
cnt = -1  
.....  
cnt = cnt + 1  
Set MyLabelMas(cnt - 1) = New MyClassLabel  
Set MyLabelMas(cnt).MyLabel = Prosmotr.MultiPage1.Pages(0).Controls.Add("Forms.Label.1")  
Set obj = MyLabelMas(cnt).MyLabel 'вот твой Label делай с ним что хочешь{/post}{/quote}  
 
Не получается - ругается на  
Set MyLabelMas(cnt).MyLabel = Prosmotr.MultiPage1.Pages(0).Controls.Add("Forms.Label.1")  
Вообще, модуль класса - это для меня (пока еще) тяжеловато, теории нет и, соответственно, опыта.
 
Возможно здесь ошибка, копировал со своего кода, поэтому не заметил  
замени Set MyLabelMas(cnt - 1) = New MyClassLabel  
на Set MyLabelMas(cnt) = New MyClassLabel
 
Выложу пример добавления Label на форму и назначение ему события Click.  
 
P.S. Чтобы тема не осталась незавершённой.
Страницы: 1
Читают тему
Наверх
Loading...