Существует ряд особенностей, которые характерны как для форм редактирования, так и для списковых форм Windows-приложений.
Единообразная обработка всех форм приложения
Чтобы единообразно обработать все формы приложения, нужно подписаться на глобальные события.
В методе Main можно подписаться на специальное событие:
static void Main()
...
// *** Start programmer edit section *** (Детейломания Main())
ICSSoft.STORMNET.Windows.Forms.WinApplication.SetUICultureAsRussian();
ICSSoft.STORMNET.Windows.Forms.Desktop.GlobalWinformEvents.Load += new EventHandler(GlobalWinformEvents_Load);
// *** End programmer edit section *** (Детейломания Main())
ICSSoft.STORMNET.Business.LockService.ClearAllUserLocks();
...
}
В обработчик этого события будет приходить форма в переменной sender. Далее, например, можно все формы подписать на нажатие определённых клавиш:
// *** Start programmer edit section *** (ДетейломанияDesktop CustomMembers)
static void GlobalWinformEvents_Load(object sender, EventArgs e)
{
((Form)sender).KeyPreview = true;
((Form)sender).KeyPress += new KeyPressEventHandler(ДетейломанияDesktop_KeyPress);
}
static void ДетейломанияDesktop_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
MessageBox.Show("Enter was pressed","Hello");
}
}
// *** End programmer edit section *** (ДетейломанияDesktop CustomMembers)
Реализация интерфейсов независимыми и зависимыми формами и отношения между ними
Диаграмма классов, представленная ниже, показывает, как относятся между собой независимые и зависимые формы списков, универсальные, а также реализуемые на основе базовых конкретные формы списков (могут реализовываться как вручную, так и посредством генераторов кода для Flexberry):

Диаграмма, представленная ниже, показывает, как относятся между собой независимые и зависимые формы редактирования, универсальные, а также базовые и конкретные на основе базовых формы (могут реализовываться как вручную, так и посредством генераторов кода для Flexberry):

Положение формы на экране
В некоторых случаях восстоновление положения формы приводило к тому, что форма не была видна на экране. Такая ситуация, например, возникает при смене разрешения монитора на более низкое: при новом разрешении форма могла оказаться за пределами видимой области.
Для управления положением формы в Flexberry Platform в класс BaseWin, являющийся базовым для всех форм, были добавлены два свойства OutScreenControl и VisiblePercent.
Свойство OutScreenControl позволяет включить контроль выхода окна за пределы экрана в процессе перемещения окна пользователем. Свойство VisiblePercent устанавливает процент размера формы (длины/ширины), который должен оставаться видимым (диапазон значений от 0 до 100).
Замечания:
-
При загрузке формы контроль выхода за пределы экрана происходит вне зависимости от значения свойства
OutScreenControl(для корректного позиционирования формы при смене разрешения). При начальном отображении формы учитывается значениеVisiblePercent, по умолчанию значение свойстваVisiblePercentравно 40. -
Текущая реализация не учитывает наличие нескольких мониторов.
Запрет закрытия формы Flexberry Winforms
Для того чтобы запретить закрытие формы, надо переопределить метод Finalize() независимой формы.
Пример:
[Scriptizer.RunTime.ScriptFinalizer]
public override bool Finalize()
{
return false;
}
Закрытие всех открытых форм
Чтобы закрыть все открытые формы приложения, как происходит при закрытии главного окна приложения Flexberry, можно использовать следующий код.
var coll = desktopCtrl2.PathRunners;
foreach (ArrayList runList in coll.GetAllValues())
{
foreach (Runner run in runList)
{
if (run.Alive)
{
run.Stop();
}
}
}