Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

31 Март 2020, 16:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Работа листенеров  (Прочитано 1076 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kadet
Форумчанин
***
Offline Offline

Сообщений: 240


« Стартовое сообщение: 24 Декабрь 2019, 22:23 »

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

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

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

* DEMO.ods (19.47 Кб - загружено 4 раз.)
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 161


« Ответ #1: 25 Декабрь 2019, 10:05 »

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

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 885


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #2: 25 Декабрь 2019, 12:58 »

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

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

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



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

* DEMO2.ods (17.38 Кб - загружено 4 раз.)
Записан

kompilainenn
Мастер
*****
Offline Offline

Сообщений: 2 895



« Ответ #3: 25 Декабрь 2019, 15:35 »

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

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 885


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #4: 25 Декабрь 2019, 16:22 »

DEMONfromtheHELL, например
Да, хотя бы и так, а то в разных темах, да ещё по несколько раз в одной теме одно и то же название файла, становится не понятно что откуда взялось и куда делось.
Записан

Kadet
Форумчанин
***
Offline Offline

Сообщений: 240


« Ответ #5: 25 Декабрь 2019, 16:45 »

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

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

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

Пол: Мужской
Сообщений: 2 885


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #6: 25 Декабрь 2019, 17:38 »

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

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

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

Kadet
Форумчанин
***
Offline Offline

Сообщений: 240


« Ответ #7: 25 Декабрь 2019, 18:36 »

removeChartDataChangeEventListener
Тоже не отключает. Плюнул на это дело, сделал таки макросом на события. Спасибо!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!