ForDisableControls#

Метод forDisableControls обеспечивает надёжное временное отключение событий данных при выполнении группы операций над выборкой, предотвращая побочные эффекты от повторных или вложенных вызовов disableControls и enableControls.

Смотрите также: Описание методов enableControls, disableControls.

Ключевые возможности#

  • Обеспечивает корректную работу с отключёнными элементами управления, исключая двойные вызовы enableControls и disableControls.

  • Сохраняет фокус в карточке объектных характеристик после установки ссылочного атрибута, предотвращая его сброс на первую строку.

Работа метода#

Метод forDisabledControls работает следующим образом:

  1. Вызывается disableControls.

  2. Флаг allowChangeControls устанавливается в значение false, и все последующие вызовы disableControls/enableControls игнорируются.

  3. Выполняется переданный блок кода внутри блока try.

  4. В блоке 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()
        }
      }
    })
  }