Разработчик платформы Power APPS о многом позаботился для удобной разработки Canvas приложений в режиме Low-Code. Но некоторых моментов, которые нередко используются в профессиональной разработке современного ПО, не хватает. В данном случае мы поговорим о вызове вспомогательных всплывающих форм (PopUp Forms).

Вызов форм обычно бывает модальный, когда вызванная форма не позволяет осуществлять с основной формой приложения никаких действий, пока не будет закрыта вызванная. Немодальная форма будет отображена поверх основной, но не будет мешать работе элементами основной формы. Для чего нужны такие формы в вебе, в т.ч. в приложениях Power APPS? Когда поле ввода (TexInput) подразумевает подстановку только тех значений, которые допустимы правилами ввода, определяемые разработчиком ПО и исключающие свободный ввод со стороны пользователя, помогающие быстро ввести нужные данные. Например, вызов калькулятора для поля или же выбор из специального справочника данных. 

В Power APPS нельзя вызвать/сделать модально Screen, поэтому используется обычный трюк с контейнерами. В чем преимущества контейнеров:

  • При перетаскивании контейнера все элементы в нем сохраняют свои координаты позиции, т.е. выполняет роли группирующего элемента интерфейса приложения.
  • Для контейнера можно выставить важные свойства: заливку фона, закругления формы и тень (лучшая визуализация вызова формы поверх).
  • Для управления вызовом контейнера используется изменение булева значения для свойства Visible.

Рассмотрим на примере. Допустим по нажатию кнопки мы должны вызвать небольшую форму с полем ввода и после нажатия на кнопке ОК вызванная форма должна закрываться, а значение ввода внесено в мини-текстовый редактор. 

Для этого на основную форму разметим все необходимые компоненты, а на стартовое событие приложения OnStart напишем код инициализации начального значения переменной vShow = false. Для Container1 (вызываемая форма) по умолчанию свойство Visible=vShow, т.е. скрыто. И заодно вернем значения по умолчанию для полей и редакторов.

Далее, укажем событие на OnSelect кнопки вызова формы простое обновление значения переменной vShow на true:

UpdateContext({vShow:true});

А для элементов контейнера пропишем обратные значения для реализации закрытия формы.

На "крестик" (простое закрытие окна) не нужно учитывать изменение переменной в редакторе, здесь достаточно просто скрыть окно.