Не понял. Ты имел ввиду события на них или события ну нах?
1. Забить на массив и объявлять переменные поштучно WithEvents.
2. Забить на Controls.Add и грузить через Load (предварительно положив экземпляр на форму).
3. Забить на события вообще и использовать враппер или сабклассинг.
Вкратце все.
ну сабклассинг это ещё понятно, хотя смутно, что-то от sub и class, а враппер это чё такое?
Улыбнуло
Если говорить грубо - сабклассинг это переопределение оконной процедуры (с целью кустарной обработки сообщений), а враппер - это класс-обертка. Все просто.
Если говорить грубо - сабклассинг это переопределение оконной процедуры (с целью кустарной обработки сообщений), а враппер - это класс-обертка. Все просто.
Ну это можно обойти, например сделать массив модуял классса, а там в каждом соответственно withevents
Это и есть класс-обертка, т.е. враппер.
может проще массив? Назнать событие одному массиву, потом смотреть Index
Каким образом ты динамически назначишь событие массиву?
ЗЫ Пример не совсем удачный уже потому что там используется таймер. Несколько проще передавать во враппер ссылку на парент-форму и вызывать метод формы явно с индексом элемента. Гораздо удобнее, но нужно следить чтобы ссылки эти потом корректно убирались при закрытии формы.
Либо IConnectionPoint
А, ну я код понимаю, а как он называется... откуда знать, студент ещё, учусь.
http://basicproduction.nm.ru/LblCstm.zip
Да ты знаешь, у менян на компе есть этот пример. Я ж - на него посмотрел и тоже захотел...
Но код, несмотря обильное наличие комментариев, я не понял: как ты добился события с помощью таймера?
Этот код хотелось бы разобрать: там в модуле класса такой код:
Private WithEvents DemoLabel As Label
Property Let MkEqu(DemoLabel2 As Object)
Set DemoLabel = DemoLabel2
End Property
Sub DemoLabel_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Form1.GetIndex DemoLabel.Name
End Sub
Комментарии я не прописал, т. к. кодировка всё переводит в греческий... Их отдельно: там написано, что
так как мы объявили переменную с событиями... то соответственно все события посланного объекта унаследовались нашей переменной (св-во mkEqu)
Посланный объект у нас - это LabelEvent(CreateLabels), правильно?
У него по идее есть имя (name)
"Label" & LTrim(Str(CreateLabels + 1))
которое мы задаем при его создании.
Почему тоогда (если
у "посланного" объекта есть события
и
У него по идее есть имя (name)
) мы не можем написать в коде: labelname_событие()...
Вообще запутано всё как-то... ты бы подробную статью написал о том, как враппер делать. Поместил бы у себя на сайте - сразу посетителей прибавится, т.к нет таких статей в интернете.
Ну или по-крайней мере, объясни мне, недоумку, как это работает?
я не понял: как ты добился события с помощью таймера?
Никак. Просто по таймеру идет проверка положения курсора и гасятся лейблы. События MouseMove обрабатываюся во враппере и выдается на форму через метод GetIndex. Т.е. это вариант ссылки из враппера на Parent форму.
Как другой вариант - STATIC вместо Label и сабкласс.
Как другой вариант - STATIC вместо Label и сабкласс.
Нашёл на vbrussians статью про сабкласстнг. Там говорится, что SubClass - это контрол, я на правильном пути? Ты не употребил ни разу этоого термина при описании сабклассинга здесь