В WPF приложении есть небольшая информационная форма, которая вызывается с основной. По задумке на этой информационной форме должен быть стандартный крестик для закрытия, а так же форма должна закрываться сама при потере фокуса. Использую для этого Window_Deactivated.
private void Window_Deactivated(object sender, EventArgs e)
{
this.Close();
}
При потере фокуса все работает как надо, но при закрытии формы через крестик выпадает исключение:
System.InvalidOperationException: 'Во время закрытия окна нельзя установить для Visibility значение Visible или вызвать Show, ShowDialog, Close или WindowInteropHelper.EnsureHandle.'
Можно ли как-то в Deactivated отловить, что форма уже закрывается, чтобы не кидать повторное закрытие и не вызывать исключение?
Да можно, выставляйте флаг и проверяйте его:
bool isClosing = false;
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
isClosing = true;
// Возможно, правильнее isClosing = !e.Cancel;
// если выдаете запрос на закрытие или что-то типа того
}
private void Window_Deactivated(object sender, EventArgs e)
{
if (!isClosing) Close();
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости