AX 2012 FormGridControl.gotFocus не работает

У меня проблема с методом FormGridControl.gotFocus. Метод работает, если сетка пуста. Если сетка содержит данные, она не работает...

Это баг или я могу сделать что-то еще?


person Frank    schedule 20.06.2014    source источник
comment
Чего вы хотите достичь? Опишите вашу проблему. См. также stackoverflow.com/a/9296261/4509.   -  person Jan B. Kjeldsen    schedule 25.06.2014
comment
Я хочу реализовать командную кнопку для сетки (например, Command Filter by Selection, 2844). Но на форме больше одной сетки. Итак, моей первой мыслью было: проверить, есть ли фокус у GridA, GridB или GridC, а затем выполнить щелчок для командной кнопки. Но это не сработало (потому что кнопка имеет фокус, если вы нажмете на нее...). Итак, мой обходной путь: я реализовал командную кнопку i для КАЖДОЙ сетки и установил фокус на сетку. Теперь кнопка Command работает нормально... Или есть решение получше? Кстати: я нашел ссылку раньше, и вы говорите, что не используйте gotFocus - есть ли для этого особая причина? откровенный   -  person Frank    schedule 26.06.2014
comment
Вроде все в порядке, хотя, во-первых, это необычная просьба. Я не могу полностью исключить gotFocus кодирование в очень редких случаях. Но чаще всего это неверный путь.   -  person Jan B. Kjeldsen    schedule 26.06.2014
comment
Да, ты прав. Но знаете ли вы, почему gotFocus не работает должным образом?   -  person Frank    schedule 26.06.2014
comment
Возможно, элемент управления в сетке получил фокус, а не сама сетка.   -  person Jan B. Kjeldsen    schedule 26.06.2014
comment
Хм... Никаких дополнительных элементов управления там нет.   -  person Frank    schedule 26.06.2014
comment
Элемент управления сетки представляет собой контейнер, содержащий другие элементы управления.   -  person Jan B. Kjeldsen    schedule 26.06.2014
comment
Да, конечно... В любом случае, это событие не сработало, как я ожидал. Кажется, это не имеет смысла — gotFocus поднимается, только если сетка пуста :)   -  person Frank    schedule 26.06.2014


Ответы (1)


gotFocus в элементах управления контейнером может быть не активировано, потому что вместо этого фокус был получен содержащимся элементом управления. Иными словами: установка фокуса на элементе управления не активирует gotFocus методов содержащихся в нем элементов управления-контейнера.

Таким образом, он может быть бесполезен в качестве инструмента для определения того, что имеет фокус.

Часто лучше проверить selectedControl класса FormRun. с помощью метода contains:

boolean inGr = element.selectedControl() && group.contains(element.selectedControl());

Это нельзя использовать в кнопках причины, потому что кнопка получает фокус при нажатии!
Это может быть полезно в методе task и других методах контроля.

person Jan B. Kjeldsen    schedule 01.07.2014