Jump to content

Recommended Posts

Posted (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 by ribeiro55
Posted

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)

Posted (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 by ribeiro55
  • Vote 1

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"

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.