|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
Добрый день! В наличии форма с 60+ полями. Необходимо при клике по полю запускать определенную процедуру. Т.к. полей много — от создания обработки события к каждому полю отказался сразу. Ибо это бред. Два дня гугления привели к следующему коду: Класс TextboxHandler Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Код формы Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Т.е., как я понял, мы бежим по контролам на форме, и полям присваиваем обработчик события. После этого обработчик добавляется в коллекцию. Ожидаемо ничего не работает :) Может быть у кого-нибудь найдется желание доступно объяснить, что я делаю не так. Или хотя бы, что можно почитать по данной теме чтобы разобраться самому? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 09:53 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
Присвоить значение свойству OnClick полей забыли. [Event Procedure] ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 10:02 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
Predeclared, Спасибо вам огромное! Как, оказывается, я был близок ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 10:07 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
mr. ShuВ наличии форма с 60+ полями. Необходимо при клике по полю запускать определенную процедуру. Т.к. полей много — от создания обработки события к каждому полю отказался сразу. Ибо это бред.Почему бред? Уверены? Процедура одна и та же? Создайте Public Function ИмяФункции() в модуле формы. Для всех полей укажите Событие Нажатие кнопки =ИмяФункции(). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 10:15 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
Да, еще. Вдруг не догадаетесь. Указывайте =ИмяФункции() не для каждого поля отдельно (за 60 операций), а выделите их все сразу и присвойте значение всем сразу (за одну операцию). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 10:19 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
Поддержу __Michelle, это проще, чем класс, их и отлаживать сложнее. В функции конкретное поле определяется через Me.ActiveControl ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 10:40 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
__MichelleПочему бред? Уверены? Процедура одна и та же? Процедура одна и та же. Один из параметров это имя поля, а второй глобальная переменная __MichelleСоздайте Public Function ИмяФункции() в модуле формы. Для всех полей укажите Событие Нажатие кнопки =ИмяФункции(). В этом случае в редакторе не отобразится для каждого поля код типа: Код: vbnet 1. 2. 3.
? Если нет, то спасибо за второй способ __MichelleДа, еще. Вдруг не догадаетесь. Указывайте =ИмяФункции() не для каждого поля отдельно (за 60 операций), а выделите их все сразу и присвойте значение всем сразу (за одну операцию). До этого догадался сразу, когда [Event Procedure] присваивал. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 10:41 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
MrShinПоддержу __Michelle, это проще, чем класс, их и отлаживать сложнее. В функции конкретное поле определяется через Me.ActiveControl Благодарю. А вот интересно, какой способ выигрышнее в плане производительно? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 10:43 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
MrShinПоддержу __Michelle, это проще, чем класс, их и отлаживать сложнее. В функции конкретное поле определяется через Me.ActiveControl Почему сложнее? Все так же просто. И даже несколько удобней, так как все в одном месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 11:07 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
AndrFПочему сложнее? Все так же просто. И даже несколько удобней, так как все в одном месте. Код-то один, да вот у вас будет 60 экземпляров класса в коллекции, в которые вы будете попадать через события. Если класс будет посложнее и будет обрабатываться несколько событий, да еще в нескольких окнах, найти причину ошибки иногда бывает довольно сложно. Я довольно часто использую подобную технику с классами, но стараюсь обойтись без нее, если появляется возможность именно из-за проблем с отладкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 11:25 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
MrShinЯ довольно часто использую подобную технику с классами, но стараюсь обойтись без нее, если появляется возможность именно из-за проблем с отладкой. Я подобную организацию применял еще работая с VB6. Получилось довольно удачно - никаких проблем с отладкой не было. Есть основной класс (типа класса формы) в который добавляются классы контролов. Основной класс ведет всю рутинную обработку - типа того как это делает форма Access, проверяя поля на валидность и выдавая сообщения. Естественно у него есть и события - BeforeUpdate, AfterUpdate и прочее нужное. Получилось очень удачно, ну и в результате код типовых форм в VB6 очень сильно упростился... Ну а сами классы надо отладить, но это один раз... ------------------------ По теме топика - как я понял его автору надо было всего лишь походим образом обработать 60 полей. Нагораживать только из за этого вряд ли стоит - подойдет любой вариант из приведенных выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 13:56 |
|
Один обработчик событий на несколько объектов формы
|
|||
---|---|---|---|
#18+
AndrFПо теме топика - как я понял его автору надо было всего лишь походим образом обработать 60 полей. Нагораживать только из за этого вряд ли стоит - подойдет любой вариант из приведенных выше. У меня заработали оба варианта, но в итоге я остановился на варианте предложенном __Michelle. Я честно говоря не подумал, о самом простом варианте и сразу начал усложнять. Зато узнал много нового. Спасибо всем кто уделил мне время! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2017, 15:16 |
|
|
start [/forum/topic.php?fid=45&fpage=75&tid=1612406]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 133ms |
0 / 0 |