FabioRochapt Posted June 3, 2012 at 02:37 PM Report #459998 Posted June 3, 2012 at 02:37 PM (edited) Boas pessoal Tenho um pequeno problema: No main form quero que o software pergunte se o utilizador tem a certeza que quer fechar a aplicação. O utilizador pode fazer isto de 2 formas: Clicando no butao "sair" ou simplesmente clicando em "X" para fechar. Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click Dim d As DialogResult = MessageBox.Show("This will close the application.Do you want to proceed?", "Exit Application", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If d = Windows.Forms.DialogResult.Yes Then Application.Exit() End If End Sub Private Sub frmMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing Dim d As DialogResult = MessageBox.Show("This will close the application.Do you want to proceed?", "Exit Application", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If d = Windows.Forms.DialogResult.Yes Then e.Cancel = False Application.Exit() Else e.Cancel = True End If End Sub O meu problema é que o programa pergunta sempre duas vezes se o utilizador quer mesmo fechar a aplicação. Edited June 4, 2012 at 01:02 PM by ribeiro55
bsccara Posted June 3, 2012 at 02:39 PM Report #460000 Posted June 3, 2012 at 02:39 PM Então tira a pergunta do ExitToolStripMenuItem_Click e o Application.Exit() do FormClosing.
FabioRochapt Posted June 3, 2012 at 03:49 PM Author Report #460020 Posted June 3, 2012 at 03:49 PM Então tira a pergunta do ExitToolStripMenuItem_Click e o Application.Exit() do FormClosing. Essa é a razão porque tenho de fazer esta alteração.
bsccara Posted June 3, 2012 at 03:58 PM Report #460022 Posted June 3, 2012 at 03:58 PM Essa é a razão porque tenho de fazer esta alteração. ??? A sequència de operações no teu código é: 1) O handler ExitToolStripMenuItem_Click é executado em resposta a um clique num botão. 2) Faz a primeira pergunta 3) Respondendo afirmativamente sinaliza o programa para terminar com Application.Exit() 4) O programa tenta fechar todas as janelas abertas por ele, pedindo confimação às mesmas (evento FormClosing) 5) O handler FormClosing da janela principal recebe o pedido de fecho e mostra a segunda pergunta 6) Respondendo afirmativamente voltas a sinalizar o programa para fechar (desnecessário, basta permitir o fecho da janela)
ribeiro55 Posted June 4, 2012 at 01:08 PM Report #460253 Posted June 4, 2012 at 01:08 PM (edited) O problema é que o evento FormClosing é chamado em qualquer situação. No handler, o FormClosingEventArgs (na variável "e") tem uma propriedade que te permite inquirir a razão do fecho. Aí, basta não fazer perguntas se a razão do fecho for qualquer outra que não a que pretendes. Penso que algo como: If e.CloseReason = CloseReason.ApplicationExitCall Then Exit Sub Dim d As DialogResult = MessageBox.Show("This will close the application.Do you want to proceed?", "Exit Application", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If d = Windows.Forms.DialogResult.Yes Then e.Cancel = False Application.Exit() Else e.Cancel = True End If Resolveria o teu problema, uma vez que lhe indicamos que Application.Exit não é motivo pretendido para levar o handler ao fim. Edited June 4, 2012 at 01:10 PM by ribeiro55 1 Report Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now