Создание диалоговых окон
Создание диалоговых окон¶
Простое диалоговое окно¶
Для создания простого диалогового окна нужно воспользоваться стандартным классом TessaDialog.
Класс имеет следующие стандартные возможности отображения:
-
Confirm - Отображает пользователю вопрос в виде окна с сообщением и кнопками “Да” и “Нет”.
-
ConfirmWithCancel - Отображает пользователю вопрос в виде окна с сообщением и кнопками “Да”, “Нет” и “Отмена”.
-
ShowError - Отображает пользователю окно с сообщением об ошибке.
-
ShowException - Отображает исключение в окне сообщений.
-
ShowMessage - Отображает пользователю окно с сообщением.
-
ShowNotEmpty - Отображает результат валидации в окне сообщений.
Рассмотрим пример создания модального диалогового окна ConfirmWithCancel с получением и обработкой результата:
using Tessa.UI;
...
SomeMethod()
{
bool? dialogResult = TessaDialog.ConfirmWithCancel(
"Отображаемое пользователю сообщение",
"Заголовок отображаемого диалогового окна");
if (!dialogResult.HasValue)
{
//Пользователь выбрал "Отмена"
//Отменяем действие
}
else if (dialogResult.Value)
{
//Пользователь выбрал "Да"
//Производим все необходимые действия
}
else
{
//Пользователь выбрал "Нет"
//Производим все необходимые действия
}
}
...
Диалоговое окно на основе вкладки карточки¶
Кроме простых диалоговых окон можно создавать диалоговые окна на основе интерфейса вкладки карточки. Для этого можно создать в системе специальную карточку, привязанную к виртуальным секциям, создать в ней вкладку и использовать эту вкладку как интерфейс диалогового окна. В платформе для таких целей используется карточка “Dialogs”.
Рассмотрим пример создания такого диалогового окна:
using Tessa.UI;
...
SomeMethod()
{
// Получаем вкладку
CardType dialogType;
CardTypeNamedForm dialogForm;
if (!cardMetadata.CardTypes.TryGetValue("CardName", out dialogType) ||
(dialogForm = dialogType.Forms.FirstOrDefault(x => x.Name == "TabAlias")) == null)
{
return;
}
CardNewRequest request = new CardNewRequest { CardTypeID = dialogType.ID };
CardNewResponse response = cardRepository.New(request);
if (!CheckResponseAndSetID(response))
{
return;
}
// Создаём модель окна
ICardModel windowCardModel = createCardModelFunc(
response.Card,
response.SectionRows,
x => dialogManager.ShowRow(x));
// Секция с данными, которая будет использоваться внутри окна, и которую нужно потом получить снаружи.
var section = windowCardModel.Card.Sections["SomeSection"];
// Показываем диалог
uiHost.ShowFormDialog(
LocalizationManager.Localize(dialogForm.TabCaption),
dialogForm,
windowCardModel,
form => { },
new UIButton(
"$UI_Common_OK",
() =>
{
// Обработка результатов при нажатии кнопки "OK"
...
return true;
},
isDefault: true,
isEnabledFunc: () => true),
new UIButton("$UI_Common_Cancel", isCancel: true));
}
Note
Более подробный пример можно посмотреть в расширениях Tessa.Extensions.Default.Client.Tiles.AcquaintanceTileExtension.