|
Программная установка картинки заголовка страницы панели на УФ | ☑ | ||
---|---|---|---|---|
0
SpellKeeper
24.07.19
✎
12:18
|
Пытаюсь программно установить картинку на странице.
Делается это в процедуре события ПриАктивизацииСтроки таблицы на форме. Код простейший. Если ВыбКартинка = 4 Тогда Элементы.СтраницаОписаниеДетали.Картинка = БиблиотекаКартинок.ВосклицательныйЗнакКрасный; ИначеЕсли ВыбКартинка = 3 Тогда Элементы.СтраницаОписаниеДетали.Картинка = БиблиотекаКартинок.Остановить12; ИначеЕсли ВыбКартинка = 2 Тогда Элементы.СтраницаОписаниеДетали.Картинка = БиблиотекаКартинок.Внимание16; КонецЕсли; Однако, при использовании этого кода программа впадает в бесконечный цикл. По всей видимости, значение Картинка устанавливается на сервере, после чего происходит возврат на клиента, и при обновлении отображения снова вызов события ПриАктивизацииСтроки. Собственно вопрос. Как это обойти? |
|||
1
lucbak
24.07.19
✎
12:45
|
Обходится точно так же и любая другая подобная фича - вызываешь
"ПодключитьОбработчикОжидания("МояПроцедура", 0.1, Истина); |
|||
2
SpellKeeper
24.07.19
✎
12:53
|
Спасибо.
То-то я смотрю этого 12345... напихано в конфах по самое не балуйся.. Все никак понять не мог зачем этот изврат. |
|||
3
SpellKeeper
24.07.19
✎
12:58
|
Все равно есть непонятной момент.
Дело в том, что до вызова этого куска кода я делаю вызов Элементы.СтраницаОписаниеДетали.Картинка = Новый Картинка; Эта строка идет самой первой в процедуре без условий. Т.е. отрабатывает всегда. И на этой строке она не циклится. Циклится она конкретно на куску указанном в сабже. А это почему? Какая ей разница когда устанавливать картинку? |
|||
4
dka80
24.07.19
✎
13:08
|
(3) потому, что при установке новой картинки вызывается процерура ПриАктивизации строки
|
|||
5
SpellKeeper
24.07.19
✎
13:15
|
(4). Так я про то и говорю. Указанная строка отрабатывает в процедуре ПриАктивизацииСтроки и бесконечного цикла не вызывает. А другие строки, делающие то же самое, только с другим значением, вызывают.
Кстати по (1). НЕ РАБОТАЕТ. Бесконечный цикл все равно появляется. Правда, здесь форма получается доступна, т.к. из процедуры ПриАктивизацииСтроки она все-таки выходит. Но 90% времени висит ожидание. Собственно, все логично. При установке картинки она все равно уходит на сервер, потом возвращается и снова вызывает Активизацию строки. А потом эта процедура снова вызывает обработчик ожидания. И так до бесконечности. |
|||
6
dka80
24.07.19
✎
13:31
|
Не рекомендуется в обработчике "ПриАктивизацииСтроки" обращаться на сервер. Если без этого нельзя обойтись, то следует помнить, что если в серверном вызове были изменены свойства элементов, которые влияют на внешний вид формы, то на клиент вернётся новое описание формы, и будет заново вызван обработчик "ПриАктивизацииСтроки".
Вероятно, другие значения вызывают обращение к серверу. |
|||
7
SpellKeeper
24.07.19
✎
13:34
|
(6) Вот я и не понимаю, почему строка
Элементы.СтраницаОписаниеДетали.Картинка = Новый Картинка; НЕ вызывает сервер, а строка Элементы.СтраницаОписаниеДетали.Картинка = МояКартинка; вызывает. |
|||
8
SpellKeeper
24.07.19
✎
14:44
|
Я её победил!
Изврат, но простой. Делается общая переменная, глобальная для модуля. Куда пишем Истина, если процедуру уже вызывали, и Ложь, если вызова еще не было. В начале процедуры ПриАктивизацииСтроки нужно проверить ее на значение Истина, и если это значение установлено, то из процедуры выйти. Так мы отсекаем повторный вызовы этой процедуры. Дальше нужные нам обработки, в том числе и установки картинок. А в конце процедуры в эту переменную записываем Истина. И в этой же процедуре разово вызываем обработчик ожидания, который должен сбросить нашу глобальную переменную в Ложь. Примерно так: &НаКлиенте Перем КартинкаУстановлена; &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) Если КартинкаУстановлена = Истина Тогда Возврат; КонецЕсли; // Код процедуры Если КартинкаУстановлена <> Истина Тогда Если ВыбКартинка = 4 Тогда Элементы.СтраницаОписаниеДетали.Картинка = КартинкаВосклЗнак; ИначеЕсли ВыбКартинка = 3 Тогда Элементы.СтраницаОписаниеДетали.Картинка = КартинкаОстановить; ИначеЕсли ВыбКартинка = 2 Тогда Элементы.СтраницаОписаниеДетали.Картинка = КартинкаВнимание; Иначе Элементы.СтраницаОписаниеДетали.Картинка = Новый Картинка; КонецЕсли; КартинкаУстановлена = Истина; ПодключитьОбработчикОжидания("УстановитьКартинкуСтраницыОписания", 0.1, Истина) КонецЕсли; КонецПроцедуры &НаКлиенте Процедура УстановитьКартинкуСтраницыОписания() КартинкаУстановлена = Ложь; КонецПроцедуры Всё. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |