bindevent и this | |
---|---|
Бураков Сергей Автор Сообщений: 280 Откуда: Calgary Дата регистрации: 07.02.2005 |
При использовании метода, привязанного при помощи BindEvent This указывает на объект, которому метод принадлежит, а не на объект, событие которого данный метод вызвало.
Как народ управляется с этой проблеммой? |
Re: bindevent и this | |
---|---|
JS Сообщений: 12264 Откуда: Эстония Дата регистрации: 04.09.2000 |
Вот пример првизяки:
Все замечательно работает и жаль, что его не было раньше. Обработка в методе udp_showriskgroupbytable (весь код естествеено не показан)
Отредактировано (17.02.05 12:52) ------------------ Knowledge is better than ignorance! Website: juri.foxhelp.eu |
Re: bindevent и this | |
---|---|
Бураков Сергей Автор Сообщений: 280 Откуда: Calgary Дата регистрации: 07.02.2005 |
К сожалению, не понял Ваш код. Непонятно, где производится привязка, и что в данном случае обозначает This.
Может быть, немножко прокомментируете. |
Re: bindevent и this | |
---|---|
JS Сообщений: 12264 Откуда: Эстония Дата регистрации: 04.09.2000 |
Давайте разбираться:
BindEvent имеет следующие параметры: oEventSource, cEvent, oEventHandler, cDelegate [, nFlags] первый - определяет, какому контролу привязываем событие. ( в моем коде это присвоение события командным кнопкам, которые вводятся в объект - их количество определяется таблицей режимов) второй - имя события - (в приведенном коде для вновь вводимых кнопок привязывается событие Click) третий, - кто будет обрабатывать событие - в моем коде обработчик этих событий custom-объект, в процедуре которого и вводятся командные кнопки, то есть в данном случае это на этот custom-объект. Если вы определили какой метод для формы, в котором вы будете вводить в форму новые контролы, или привязываать какие-то события к существующим, то This будет означать ссылку на объект формы. четвертый - определяет метод, который будет обрабатывать событие - в моем случае, это метод "udp_showriskgroupbytable" того же custom-объекта, о котором упоминалось выше или "делегируемый" метод, который будет исполняться при клике на вводимых в контейнер кнопках (код взят из ввода кнопок в страницу страничного фрейма) пятый флаг - 0 - означает, что будет выполняться делегируемый код, до выполнения кода в Click (кнопка может быть основана на классе, у которого в методе Click уже что-то есть) Привязали... теперь при клике на кнопке из назначенного в функции объекта обработчика будет вызван его метод. Начинаем обработку. В указанном примере обработка ведется по имени введенной кнопки, для чего в указанном методе вызываем функцию Aevents, забираем событие в массив Aevents(laObjects,0) Поскольку в качестве второго параметра в этой функции мы указали 0, то будет возвращен массив, где первым элементом является ссылка на объект, который вызвал срабатывание события. Забираем ссылку из массива и работаем loEventSource = laObjects(1) далее извлекаем имя объекта и выбираем, что мы хотели делать при клике на кнопку с ее именем. Положим, что кнопка имела имя cmd_AppendRiskGroup. Отрезаем от имени префикс "cmd", вместо него подставляем "udp" получаем имя процедуры udp_AppendRiskGroup, определенной в этом же custom-объекте обработчике и исполняем его. Все это сделано для работы с динамически формируемыми формами. Если объяснил неясно, сообщите. Отредактировано (17.02.05 15:30) ------------------ Knowledge is better than ignorance! Website: juri.foxhelp.eu |
Re: bindevent и this | |
---|---|
Бураков Сергей Автор Сообщений: 280 Откуда: Calgary Дата регистрации: 07.02.2005 |
Спасибо, теперь все понятно. Пример весьма интересный, хотя, собственно, главным в нем ( по крайней мере ответом на мой вопрос) является использование Aevents(laObjects,0).
Очень странно, что BindEvent раньше практически не рассматривалась на форуме. По моему, это одно из наиболее значительных новшеств в восьмой версии. |
Re: bindevent и this | |
---|---|
JS Сообщений: 12264 Откуда: Эстония Дата регистрации: 04.09.2000 |
Очень нужная функция, особенно с учетом динамически выстраиваемых форм.
Например - design ------------------ Knowledge is better than ignorance! Website: juri.foxhelp.eu |
Re: bindevent и this | |
---|---|
JS Сообщений: 12264 Откуда: Эстония Дата регистрации: 04.09.2000 |
run-time - та же страница
Отредактировано (17.02.05 16:10) ------------------ Knowledge is better than ignorance! Website: juri.foxhelp.eu |
Re: bindevent и this | |
---|---|
JS Сообщений: 12264 Откуда: Эстония Дата регистрации: 04.09.2000 |
run-time
------------------ Knowledge is better than ignorance! Website: juri.foxhelp.eu |
Re: bindevent и this | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi, JS!
IMHO 99.99% когда МОЖНО применить BindEvents() замечательно решаются и без этой функции - просто соответствующим описанием классов. А на оставшийся 0.01% выпадает например _SCREEN.Resize() В общем нововведение конечно существенное, но IMHO не так уж и широко оно применимо. ------------------ WBR, Igor |
Re: bindevent и this | |
---|---|
JS Сообщений: 12264 Откуда: Эстония Дата регистрации: 04.09.2000 |
Привет Игорь!
По большому счету так, однако можно немного снизить процент, за счет возможности привязки событий к вновь вводимым, с помощью AddProperty, свойствам контейнеров и контролов, что опять-таки характерно для проектирования со сценариями, то есть при динамическом формировании контейнеров. Этому нет эквивалента в run-time и это успешно решается с помощью BindEvent, когда требуется отследить изменение значения вновь введенного свойства. Ну еще чуток (понижаем процент) при многоцелевом использовании контрола, здесь тоже удобно подменять методы в зависимости от результата исполнения сценария. Но опять-таки это достаточно специфичные программные модули. ------------------ Knowledge is better than ignorance! Website: juri.foxhelp.eu |
© 2000-2024 Fox Club  |