powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Вызов ItemChanged
16 сообщений из 16, страница 1 из 1
Вызов ItemChanged
    #32859915
Levon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времечка суток!
У меня такая непонятная (мне) проблемка - есть поле в DW типа Date. Когда я из скрипта меняю в нём значение, не отрабатывает ItemChanged. Когда руками редактирую это поле - всё нормально! Что вы можете по этому поводу подсказать (PB 9 b 6533)
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32859923
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а оно и не должно отрабатывать.
есть реальность, а есть Ваше искаженное представление о ней
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32859931
Alexander Kolotinets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Levon

Прийдется ручками вызвать ItemChanged после изменения значения поля (если это необходимо). RTFM TriggerEvent (), PostEvent () etc.
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32859942
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неееет!
Иначе появится следующий вопрос - как передать dwo.
А потом следующий вопрос - почему у меня появились memory leaks.

лучше сразу свое творчество выносить в отдельную функцию и вызывать ее из itemchanged и плюс оттуда где "из скрипта меняю в нём значение".

ИМХО, "встроенные" события вызывать "вручную" нельзя категорически - у человека у которого сработал breakpoint например в resize и мысли не должно возникать что это вызвано не изменениями размера окна, а вызвано кем-то откуда-то зачем-то....
то же самое касается всяческих itemchanged, editchanged, clicked и т.п.
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32859948
Alexander Kolotinets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейНеееет!
Иначе появится следующий вопрос - как передать dwo.
А потом следующий вопрос - почему у меня появились memory leaks.

лучше сразу свое творчество выносить в отдельную функцию и вызывать ее из itemchanged и плюс оттуда где "из скрипта меняю в нём значение".

ИМХО, "встроенные" события вызывать "вручную" нельзя категорически - у человека у которого сработал breakpoint например в resize и мысли не должно возникать что это вызвано не изменениями размера окна, а вызвано кем-то откуда-то зачем-то....
то же самое касается всяческих itemchanged, editchanged, clicked и т.п.

Если сам проектируешь приложение - согласен, но если вопрос касается сопровождения ранее созданного творения, то проще все-таки передать параметры ИМХО :)
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32860120
Levon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейИМХО, "встроенные" события вызывать "вручную" нельзя категорически
Абсолютно с Вами согласен! За совет с функцией - спасибо, именно так и сделаю. Повозиться, конечно, прийдётся, но что ж поделаешь!
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32873410
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dwobject dwo1

dwo1 = dw_1.Object.youitemchngedcolumnname
dw_1.event itemchanged(1, dwo1, 'youstringvalue')


Туды её в качель...
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32873463
alexis glinski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voronkdwobject dwo1

dwo1 = dw_1.Object.youitemchngedcolumnname
dw_1.event itemchanged(1, dwo1, 'youstringvalue')


Туды её в качель...
так конечно можно, но не нужно :)
чтоб поменьше переписывать кода, лучше всего создать
Код: plaintext
long ue_ItemChanged( long row, DWObject dwo, string data )
и этот эвент вызывать в ItemChanged вот так:
Код: plaintext
RETURN this.Event ue_ItemChanged( row, dwo, data )
, а весь код из ItemChanged перенести (cut-paste) в ue_ItemChanged ...
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32873605
Guest_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выполнение AcceptText() - вызывает событие ItemChanged(), ежели конечно не вызовит событие ItemError()
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32873852
Levon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Guest_2: Не вызывает, а может вызывать. (см. хелп) В данном случае нихрена не вызывается.
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32875375
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voronk
dwobject dwo1

dwo1 = dw_1.Object.youitemchngedcolumnname
dw_1.event itemchanged(1, dwo1, 'youstringvalue')

а где DELETE dwo1 ?
и как в этом случае с памятью? не вытекает?
и еще - тот кто пишет в itemchanged return 1 ожидает что сработает itemerror.
и где обработка возвращаемого из itemchanged значения?
и как обрабатывать return 2?

Еще раз повторю - если я попал в itemchanged это должно означать что юзер какое-то поле отредактировал, а не то что кому-то лень сделать отдельную функцию/событие для обработки itemchanged в тех случаях когда оно якобы должно вызываться.


alexis glinski
, а весь код из ItemChanged перенести (cut-paste) в ue_ItemChanged ...

логично. но я бы передавал dwo.name. весь dwo там нафик не нужен.
если кроме name что-то понадобится - легко вытащить самостоятельно.
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32875492
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я извиняюсь, меньше всего я хочу увести человека не туда куда надо, скорее всего я чего то не допонял.

К Андрею:
А зачем "delete"?
Я декларирую dwo как локальную переменную в "window" ивенте, не в "datawindow".
Нет, память не вытекает.
Скрипт давно работает и нареканий не вызывает в "fileopen" ивенте.

К Левону:
давай (если не облом) по подробнее, откуда ты этот "itemchanged" хочеш вызывать, в каком скрипте/ивенте?
Может можно: сначала "validate data", потом "SetItem", потом "Accepttext" и dw_1.TriggerEvent(Itemchanged!)?

Туды её в качель...
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32875777
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем "delete"?
Я декларирую dwo как локальную переменную в "window" ивенте, не в "datawindow".сорри, не delete конечно, а DESTROY. эт то же самое в каком-то другом языке называется delete. апичатка
какая разница где объявлена переменная?
Вот тут есть DataWindowExpressions там где то посередине есть "Destroying Objects You Didn't Create"
впрочем статья старая, может сейчас уже не так - не проверял.
меньше всего я хочу увести человека не туда куда надо именно этим Вы и занимаетесь в данный момент.
впрочем поздно уже
Автор топика все правильно понял еще 11-го числа.
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32877865
Renesans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗоринАндрей,
Андрей, это уже не первая тема, в котором Вы выступаете категорически против вызова событий из скрипта. И хотя я без проблем использую такие вызовы, тем не менее с приводимыми Вами аргументами согласен. Но вот Вы предлагаете заводить новую функцию. Вопрос - а где? Можно эту функцию разместить как функцию окна. В первое время я так и делал. Но потом мне это стало неудобным. Когда dw контролов и таких функций становится много, то очень трудно определить - что к чему относится. Особенно, когда надо что-то модифицировать через каке-то время, через годик, например. А все потому, что по сути, функция должна быть методом datawindow объекта, а не окна. Но у простого dw контрола, возможности завести определенные пользователем методы нет. Для этого приходится создавать user object типа datawindow, прописывать этот метод. В результате количество объектов в проекте увеличивается, наглядность также теряется. Да и в плане системных ресурсов я думаю это обходится небесплатно.
Так как же быть? Как Вы поступаете в этих случаях?
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32877966
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак Вы поступаете в этих случаях?Долго объяснять. В разных случаях по разному.
Ну если в двух словах - обработка практически вся строится на сервисах.
т.е. при itemchanged, itemfocuschanged, SetItem, и т.п. уведомляются соответствующие сервисы. И в свою очередь вызывают события datawindow, изначально пустые( на жаргоне - "дырки" :-) , в которых можно прописать дополнительный код или изменить поведение сервиса (аналогично тому как работает return 1 / return 2 в itemchanged)
Ну и сами сервисы часто помогают просто избежать кодирования в соответствующих event-ах.
Ну например вместо проверки в itemchanged
пишем в конструкторе dw control что-то типа inv_validator.of_AddRule('start_date < end_date'). Далее сервис будучи вызван из itemcganged перебирает выражения и проверяет их, по ходу дела вызывая event-ы dw_control-а srv_val_beginvalidate, srv_val_endvalidate, srv_val_validation_error и т.п.
Часто повторяющиеся вещи выносим в non-visual object и вызываем из "дырок" по мере необходимости.
...
Рейтинг: 0 / 0
Вызов ItemChanged
    #32879782
Renesans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Однако, Андрей, согласитесь, приведенные решения не лежат на поверхности, и людям начинающим (и не только начинающим) совсем не очевидны. А надо какое-то с одной стороны простое, с другой стороны надежное средство. Можно также, как это предлагает в этой теме Alexis Glinski , в роли функций применять user event-ы:
Код: plaintext
1.
2.
3.
4.
так конечно можно, но не нужно :) 
чтоб поменьше переписывать кода, лучше всего создать
long ue_ItemChanged( long row, DWObject dwo, string data )
и этот эвент вызывать в ItemChanged вот так:
RETURN this.Event ue_ItemChanged( row, dwo, data )
Но тут опять же немало вопросов. Во-первых, корректно ли использование эвентов вместо функций? Не приведет ли интенсивное их применение к ошибкам? Во вторых, что использовать - PostEvent или TriggerEvent для вызова этих событий? Пока я очевидных решений здесь не вижу, потому не избегаю вызова событий из скрипта.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Вызов ItemChanged
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]