Событие HandleDestroyed вызывается, если закрывающая форма не является основной формой. Если основная форма закрыта, приложение прерывается и события больше не запускаются.
Я сделал тест, запустив приложение так:
Form1 frmMain = new Form1();
frmMain.Show();
Application.Run();
Теперь закрытие основной формы больше не отменяет заявку. В форме я делаю это:
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
new Thread(() =>
{
Thread.Sleep(5000); // Give enough time to see the message boxes.
Application.Exit();
}).Start();
}
И теперь для элемента управления вызываются события HandleDestroyed и Disposed.
public Form1()
{
InitializeComponent();
button4.HandleDestroyed += new EventHandler(button4_HandleDestroyed);
button4.Disposed += new EventHandler(button4_Disposed);
}
void button4_Disposed(object sender, EventArgs e)
{
MessageBox.Show("Disposed");
}
void button4_HandleDestroyed(object sender, EventArgs e)
{
MessageBox.Show("HandleDestroyed");
}