Уже задавал подобный вопрос на старом форуме, но ответа не получил.
Есть массив из моих любимых UserControl
ов. Предполагается, что юзер должен иметь возможность закрывать каждый из них.
кнопка закрытия:
private void btnClose_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (e.X >= 0 && e.X <= btnClose.Width && e.Y >= 0 && e.Y <= btnClose.Height)
{
Closing?.Invoke(this); //событие
Dispose();
}
}
}
Обработчик:
private void CloseHandler(object sender) =>
{
ZeratoolPlayerGui playerGui = sender as ZeratoolPlayerGui;
players.Remove(playerGui);
if (playerGui == activePlayer)
{
if (players.Count > 0)
{
players[0].Activate();
}
else
{
activePlayer = null;
}
}
System.Diagnostics.Debug.WriteLine($"Player {playerGui.Title} closed");
};
Это работает. Всё нормально (вроде как).
Но что если надо по этому событию закрыть всю программу?
private void CloseHandler(object sender) =>
{
ZeratoolPlayerGui playerGui = sender as ZeratoolPlayerGui;
players.Remove(playerGui);
if (playerGui == activePlayer)
{
if (players.Count > 0)
{
players[0].Activate();
}
else
{
activePlayer = null;
}
}
System.Diagnostics.Debug.WriteLine($"Player {playerGui.Title} closed");
if (playerGui.IsFullscreen) <<добавлено
{
Close();
}
};
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
config.Save();
Hide();
foreach (ZeratoolPlayerGui z in players)
{
z.Stop();
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (activePlayer != null && activePlayer.IsMaximized)
{
if (File.Exists(config.playlistFileName))
{
File.Delete(config.playlistFileName);
}
if (activePlayer.Playlist.Count > 0)
{
activePlayer.Playlist.SaveToFile(config.playlistFileName);
}
}
foreach (ZeratoolPlayerGui z in players)
{
z.Dispose();
}
players.Clear();
}
Вроде тоже не крашится. Но получается, что программа закроется, а код в методе btnClose_MouseUp()
не выполнится до конца? Или что с ним станет?