Обработчик событий для нескольких объектов формы.

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Добрый день! Хочу предложить такую задачу:
На пользовательской форме есть несколько десятков объектов "Label" . В ответ на событие "Click" должен запускаться макрос, в каждом случае отличающийся только аргументами, определяемыми свойствами ".Name" и ".Caption" соответствующих объектов. Можно ли сделать групповой обработчик события "Click", который возвращал бы значение свойств ".Name" и ".Caption" данного объекта, чтобы не прописывать несколько десятков обработчиков.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

а почему нет?
прописать в макросе все Label и изменить им нужные свойства "одним махом". (click - ом)
или я не так понял вопрос ?
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Я имел в виду, чтобы не писать кучу обработчиков событий для однотипных объектов:

Код: Выделить всё

Private Sub Label1_Click()
'Функция (label1.name, label1.caption)
End Sub

Private Sub Label2_Click()
'Функция (label2.name, label2.caption)
End Sub

Private Sub Label3_Click()
'Функция (label3.name, label3.caption)
End Sub

' и т.д.
А написать один обработчик события для всех объектов Label на форме или в одной рамке сразу. Свойства объекта Label в данном случае не присваиваются, а наоборот, являются аргументами функции.
В противном случае, было бы всё очень просто.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

не знаю, проверить не на чем (лень Вашу форму полностью воспроизводить :) )
А что, так:

Код: Выделить всё

Sub Test()
'Функция (label1.name, label1.caption)
'Функция (label2.name, label2.caption)
'Функция (label3.name, label3.caption)
End Sub
не работает?
***
p.s. если бы сразу видел Вашу редакцию предыдущего поста, то этот был бы неуместен.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Эх, не быть мне политиком... :)
Извиняюсь за, возможно, плохую формулировку проблемы. Попробую объяснить ещё раз:

Запускаемая функция должна зависит от того, по какой надписи пользователь щёлкнул. От этого будут зависеть аргументы функции, определяемые свойствами объекта (Label), вызвавшего событие "Click".

P.S.: Когда отвечал, не видел предыдущего сообщения. Видимо, это то, что нужно, спасибо! Буду пробовать.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

AlexZZZ,
Запускаемая функция должна зависит от того, по какой надписи пользователь щёлкнул. От этого будут зависеть аргументы функции, определяемые свойствами объекта (Label), вызвавшего событие "Click".
вот теперь понял :)
конечно, все что я писал выше - это о другом :)
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Ура! Заработало!! bi-lya, спасибо большое!!!

Единственная проблема: такая конструкция для объекта Label не работает:

Код: Выделить всё

Private Sub ctl_DblClick()
MsgBox ctl.Caption
End Sub
Или событие "DblClick" для объекта "Label" недопустимо и возможно использовать только событие "Click" ("ctl_Click" - работает)?
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

у меня вот так

Код: Выделить всё

Private Sub Label1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox Label1.Caption
End Sub
работает
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

&quot писал(а):у меня вот так

Код: Выделить всё

Private Sub Label1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox Label1.Caption
End Sub
работает
Да, так, действительно работает. Спасибо за подсказку!
Ответить