AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.03.2024, 20:51   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,926 / 3206 (114) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
? Метод isVisible класса FormControl. Что он делает ?
Вопрос (Ax 2012).
Как работает метод isVisible класса FormControl ?

Я раньше думал что это просто сумма (через И) методов visible() для контрола, поля датасорса и поля таблицы
X++:
(formControl.visible() && formDataObject.visible() && dictField.visible() )
Но оказалось, что это не так.

Есть исключения.
Например, если в форме несколько закладок (tabPage) и контрол расположен не на 1-й закладке то при после открытия формы для него isVisible вернет false. Но при переключении на нужную вкладку, начинает возвращать true. Похоже сделана ленивая инициализация значения в целях оптимизации.
Также если на форме несколько датасорсов и идет изменение свойства visible для контрола и содержащих его групп, то неожиданно значение может "залипнуть" даже при переключении на нужную вкладку. Метод все равно возвращает false. Но если сделать reread на датасорсе то "отмыкает" и значение становится правильным.

Пришлось написать свой метод isVisible который работает всегда как надо.

Но может быть я просто не понимаю как он должен работать ? В документации внятного описания не нашел. В гугле тоже молчок.

Есть еще isDisplayed. Он просто выводит, видим ли в данный момент контрол для пользователя (стоим на нужной вкладке и контрол виден, значит true, переключились на другую вкладку - false)

Последний раз редактировалось Logger; 27.03.2024 в 21:10.
Старый 27.03.2024, 21:00   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,926 / 3206 (114) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Зачем все это потребовалось.

У нас сделана модификация, которые на формах скрывает родительский контрол, если в нем нет видимых дочерних.
Это потребовалось, так как свойство HideIfEmpty не отрабатывает, если элементы управления скрыты через поля датасорса. И element.redraw() не помогает.

Но как выяснилось что модификация работала не всегда. Иногда вела себя странно. Разборки привели к виновнику, которым оказался isVisible
Возможно поэтому и HideIfEmpty мог не отрабатывать. Возможно он тоже использует результат работы formControl.isVisible()
Старый 31.03.2024, 22:16   #3  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
294 / 851 (29) +++++++
Регистрация: 23.10.2012
В лоб - не воспроизводится.
Старый 20.08.2024, 20:26   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,926 / 3206 (114) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
метод замена
X++:
public static boolean isVisible_MRC(FormControl _formControl)
{
    DictField       dictField;
    FieldId         fieldId;
    FormDataObject  formDataObject;

    boolean     ret = true;
    ;

    if (!_formControl)
    {
        return false;
    }
    if (!_formControl.visible())
    {
        return false;
    }
    if (_formControl.fieldBinding() &&
        _formControl.dataSourceObject())
    {
        fieldId = _formControl.fieldBinding().fieldId();
        if (fieldId)
        {
            formDataObject = _formControl.dataSourceObject().object(fieldId);
            if (formDataObject && !formDataObject.visible())
            {
                return false;
            }
            dictField = new DictField(_formControl.fieldBinding().tableId(), fieldId);
            if (dictField && !dictField.visible())
            {
                return false;
            }
        }
    }

    return ret;
}
За это сообщение автора поблагодарили: dech (3).
Теги
formcontrol, isvisible

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Метод typeCnt() класса Dictionary SRF DAX: Программирование 2 25.06.2009 14:27
Как запустить метод класса :) Silence DAX: Программирование 6 19.10.2006 12:23
Запустить метод класса loka DAX: Программирование 2 13.03.2006 15:40
Как вызвать нужный метод класса? Pawlik DAX: Программирование 5 12.01.2006 15:47
Метод класса, возвращающий сумму налога. 2.5SP5 studentLPC DAX: Программирование 2 25.07.2003 12:21
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:58.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.