:: Архив конференции по VFP до 2005 года
bindevent и this
Бураков Сергей
Автор

Сообщений: 280
Откуда: Calgary
Дата регистрации: 07.02.2005
При использовании метода, привязанного при помощи BindEvent This указывает на объект, которому метод принадлежит, а не на объект, событие которого данный метод вызвало.
Как народ управляется с этой проблеммой?
Ratings: 0 negative/0 positive
Re: bindevent и this
JS

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
Вот пример првизяки:
Lparameters lpoObject
Local loControl
For Each loControl In lpoObject.Controls
If Upper(loControl.BaseClass)="COMMANDBUTTON"
BINDEVENT(loControl,"Click",THIS,"udp_showriskgroupbytable",0)
Endif
Endfor

Все замечательно работает и жаль, что его не было раньше.

Обработка в методе udp_showriskgroupbytable
(весь код естествеено не показан)

Aevents(laObjects,0)
loEventSource = laObjects(1)



Отредактировано (17.02.05 12:52)


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive
Re: bindevent и this
Бураков Сергей
Автор

Сообщений: 280
Откуда: Calgary
Дата регистрации: 07.02.2005
К сожалению, не понял Ваш код. Непонятно, где производится привязка, и что в данном случае обозначает This.
Может быть, немножко прокомментируете.
Ratings: 0 negative/0 positive
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
Ratings: 0 negative/0 positive
Re: bindevent и this
Бураков Сергей
Автор

Сообщений: 280
Откуда: Calgary
Дата регистрации: 07.02.2005
Спасибо, теперь все понятно. Пример весьма интересный, хотя, собственно, главным в нем ( по крайней мере ответом на мой вопрос) является использование Aevents(laObjects,0).
Очень странно, что BindEvent раньше практически не рассматривалась на форуме. По моему, это одно из наиболее значительных новшеств в восьмой версии.
Ratings: 0 negative/0 positive
Re: bindevent и this
JS

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
Очень нужная функция, особенно с учетом динамически выстраиваемых форм.
Например - design




------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive
Re: bindevent и this
JS

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
run-time - та же страница



Отредактировано (17.02.05 16:10)


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive
Re: bindevent и this
JS

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
run-time




------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive
Re: bindevent и this
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi, JS!

IMHO 99.99% когда МОЖНО применить BindEvents() замечательно решаются и без
этой функции - просто соответствующим описанием классов. А на оставшийся
0.01% выпадает например _SCREEN.Resize()
В общем нововведение конечно существенное, но IMHO не так уж и широко оно
применимо.




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: bindevent и this
JS

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
Привет Игорь!

Igor Korolyov
IMHO 99.99% когда МОЖНО применить BindEvents() замечательно решаются и без
этой функции - просто соответствующим описанием классов

По большому счету так, однако можно немного снизить процент, за счет возможности привязки событий к вновь
вводимым, с помощью AddProperty, свойствам контейнеров и контролов, что опять-таки характерно для проектирования
со сценариями, то есть при динамическом формировании контейнеров. Этому нет эквивалента в run-time и это
успешно решается с помощью BindEvent, когда требуется отследить изменение значения вновь введенного
свойства. Ну еще чуток (понижаем процент) при многоцелевом использовании контрола, здесь тоже удобно
подменять методы в зависимости от результата исполнения сценария. Но опять-таки это достаточно специфичные
программные модули.




------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 2 (Гостей: 2)

© 2000-2024 Fox Club 
Яндекс.Метрика