ForDisableControls#
Метод forDisableControls обеспечивает надёжное временное отключение событий данных при выполнении группы операций над выборкой, предотвращая побочные эффекты от повторных или вложенных вызовов disableControls и enableControls.
Смотрите также: Описание методов enableControls, disableControls.
Ключевые возможности#
Обеспечивает корректную работу с отключёнными элементами управления, исключая двойные вызовы
enableControlsиdisableControls.Сохраняет фокус в карточке объектных характеристик после установки ссылочного атрибута, предотвращая его сброс на первую строку.
Работа метода#
Метод forDisabledControls работает следующим образом:
Вызывается
disableControls.Флаг
allowChangeControlsустанавливается в значениеfalse, и все последующие вызовыdisableControls/enableControlsигнорируются.Выполняется переданный блок кода внутри блока
try.В блоке
finallyфлагallowChangeControlsвозвращается в значениеtrue, и вызываетсяenableControls.
def forDisabledControls(f: => Unit): Unit = {
if (allowChangeControls) {
disableControls()
allowChangeControls = false
try {
f
} finally {
allowChangeControls = true
enableControls()
}
} else {
f
}
}
Флаг allowChangeControls по умолчанию равен true. Если его значение — false, то вызовы disableControls и enableControls не выполняются.
Примеры использования#
Здесь выполняется изменение видимости атрибутов с отключенными контролами:
selection.forDisabledControls{
attrs().foreach(attr => {
val settingOpt = savAttrs.get(attr.name.toUpperCase)
if (settingOpt.nonEmpty) {
val setting = settingOpt.get
attr.isVisible = true
attr.caption = buildAttrCaption(setting).get
if (setting.nOrder.isNotNull) {
attr.order = setting.nOrder.get.doubleValue()
}
}
})
}