Существует ряд особенностей, которые характерны как для форм редактирования, так и для списковых форм 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();
}
}
}