Работа листенеров

Автор Kadet, 24 декабря 2019, 22:23

0 Пользователи и 1 гость просматривают эту тему.

Kadet

Добрый день, уважаемые коллеги!
И снова я хочу попросить совета.
Продолжаю исследовать calc. И столкнулся с корявой работой листенеров. В общем, устанавливаю листенеры на отслеживание изменений данных в ячейках. Данные в ячейках заносятся с помощью чекбоксов (0 или 1), а листенеры окрашивают эту ячейку в разные цвета, в зависимости от занесённого в неё значения (0 - зелёный, 1 - красный или синий).

При первой загрузке, формировании листа, всё работает как надо. Однако, после очистки страницы и занесении новых данных старые листенеры не удаётся отключить, они продолжают работать и менять цвета ячеек при занесении в них при заполнении данных. (Для простоты первичные данные берутся из столбцов 10 и 11).
При отключении листенеров всё время выбивает ошибки. Кстати такая же проблема у всех моих листенеров в базе. Всё время дают ошибки при отключении, поэтому приходится их просто не отключать. Читал в пояснениях в инете, что листенер можно отключить с помощью метода removeDataChangeEventListener (в данном конкретном случае), но "скармливать" ему нужно точно тот же листенер, который устанавливался. Однако, никак не могу разобраться как же найти "тотже-самый"  листенер. К тому же один и тот же листенер у меня вешается на многие ячейка, которые в результате нормально выполняют свои задачи. Однако, не отключаются.

Собственно демо в демке.

economist

В Calc есть листнеры, которые никогда не ошибаются и не сбиваются.
Это Формат-Условное-Условие - "условное форматирование, УФ". Для раскраски самое то.
Если данные вносятся чекбоксами - в их свойствах можно указать зависимые ячейки (в т.ч. в скрытом столбце) и настроить на них УФ.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

rami

Kadet, если вы игнорируете ошибки (ON LOCAL ERROR resume next), то не удивляйтесь.

Видите разницу между removeDataChangeEventListener (ошибка у вас) и removeChartDataChangeEventListener (так надо).

Я утомился править ваши ошибки, почему бы вам не назначить чекбоксу событие как обычной кнопке?



P.S. разнообразьте иногда названия выкладываемых файлов (желательно латиницей), а то всё DEMO, да DEMO.

kompilainenn

Цитата: rami от 25 декабря 2019, 12:58P.S. разнообразьте иногда названия выкладываемых файлов (желательно латиницей), а то всё DEMO, да DEMO.
DEMONfromtheHELL, например
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

rami

Цитата: kompilainenn от 25 декабря 2019, 15:35DEMONfromtheHELL, например
Да, хотя бы и так, а то в разных темах, да ещё по несколько раз в одной теме одно и то же название файла, становится не понятно что откуда взялось и куда делось.

Kadet

Обход ошибок сделаны намерено, чтобы ошибки, которые постоянно присутствуют, не вылетали.
Цитата: rami от 25 декабря 2019, 12:58Видите разницу между removeDataChangeEventListener (ошибка у вас) и removeChartDataChangeEventListener (так надо).
Если бы я знал о существовании removeChartDataChangeEventListener, я бы, наверное использовал бы её, и не задавал бы вопросы на форуме. Сей макрос, по установке листенера, я вытащил из инета и только локализовал его под свои нужны. Думал, что там было правильно.

Над привязкой события думал, но по какой-то причине отказался от этой идеи. Уже не помню, но видимо потому, что в оригинале в связанную ячейку заносится нужная дата. Поэтому и решил использовать слежение за ячейкой, а не событие чекбокса. (К тому же я никак не могу найти метод события, к которому привязывать в чекбоксе).

Спасибо за исправления моих ошибок. Попробую внедрить.

rami

Цитата: Kadet от 25 декабря 2019, 16:45Обход ошибок сделаны намерено, чтобы ошибки, которые постоянно присутствуют, не вылетали.
Уж лучше писать код рандомно, да ещё и с закрытыми глазами. А какая разница? В обоих случаях не видно сообщений об ошибках и какой-то кривой результат (если есть).

Цитата: Kadet от 25 декабря 2019, 16:45Если бы я знал о существовании removeChartDataChangeEventListener, я бы, наверное использовал бы её, и не задавал бы вопросы на форуме. Сей макрос, по установке листенера, я вытащил из инета и только локализовал его под свои нужны. Думал, что там было правильно.
Знать всё не возможно, да и не нужно, немножко здравого смысла — добавляем addChartDataChangeEventListener, удаляем: removeChartDataChangeEventListener — что добавили, то и удалили.

В интернете наряду с отличным вещами есть и лютый бред, нужно быть очень осторожным.

Kadet

Цитата: rami от 25 декабря 2019, 17:38removeChartDataChangeEventListener
Тоже не отключает. Плюнул на это дело, сделал таки макросом на события. Спасибо!