Seu usuário pode fechar sem querer sua aplicação. Foi maximizar a janela, errou e clicou no botão de fechar… já era. O mesmo para menus ou outras opções de encerrar o programa. Em alguns casos isso não é tão ruim, basta abrir novamente. Mas em outros, as consequências podem ser bem sérias. Exibir uma confirmação de que o usuário realmente deseja fechar a aplicação é interessante nesses casos.
Exibir esta dialog para confirmação no .NET Framework é bem simples. O primeiro passo é tratar o evento FormClosing da tela principal de sua aplicação. Ao disparo deste evento, seu método irá receber como parâmetro uma instância da classe FormClosingEventArgs.
Esta classe possui duas propriedades:
- CloseReason. Esta propriedade informa qual o motivo de sua aplicação estar sendo encerrada. Por exemplo, seu valor pode informar que o programa está sendo fechado pois o sistema operacional está sendo desligado ou pois o usuário pediu, entre várias outras razões. Esta propriedade é read-only.
- Cancel. Esta propriedade informa se o fechamento da aplicação deve ser cancelado. Se ao final do método o valor desta propriedade for true, seu programa não será encerrado. Seu valor padrão é false.
No método tratando o evento FormClosing, você deve primeiro observar a propriedade CloseReason. Escreva uma verificação para evitar que a confirmação seja mostrada quando o sistema está sendo desligado, por exemplo.
Depois, exiba uma dialog através de MessageBox.Show, informando qual deve ser o texto, o título, o ícone e quais botões devem estar na dialog. O normal é como na imagem acima: Um texto explicando o que pode acontecer caso a aplicação seja fechada, ícone de aviso (Warning) e botões Sim/Não.
Usando o retorno do MessageBox.Show (uma instância de DialogResult, que informa qual botão foi pressionado na tela de confirmação), verifique se o usuário escolheu não fechar a aplicação. Caso isto tenha acontecido, mude o valor da propriedade Cancel de sua instância de FormClosingEventArgs para true.
Para ficar mais claro, segue um exemplo do código deste método, para criar a confirmação da imagem do começo do post:
private void FormClosingEvt(object sender, FormClosingEventArgs e) { if (e.CloseReason != CloseReason.WindowsShutDown) { DialogResult result = MessageBox.Show( "Closing the application will stop changing your background image.\n\nAre you sure you want to leave?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result == DialogResult.No) { e.Cancel = true; } } }
Atribuindo este método para o evento de FormClosing do formulário principal de sua aplicação e alterando as mensagens para algo que se encaixe melhor no contexto do seu programa, você terá uma janela de confirmação evitando o fechamento acidental de sua aplicação.
Qualquer dúvida, deixe um comentário e responderei assim que puder.