How to handle a form close event in vb.net - vb.net

I have used the below code but its not showing the msgbox. What is wrong with this code ?
Private Sub frmSimple_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
Dim result = MsgBox("Are you sure you want to Exit ?", vbYesNo)
If result = DialogResult.Yes Then
me.Close()
End If
End Sub

This code runs after the form has been closed, when it's being disposed.
Depending on how you're showing the form, it might not get disposed at all.
You need to handle the FormClosing event and set e.Cancel to True if you want to cancel the close.

Private Sub frmProgramma_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If MessageBox.Show("Are you sur to close this application?", "Close", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
Else
e.Cancel = True
End If
End Sub
or that is how i use it everytime over and over...

Use FormClosing event. MSDN

Dim result = MsgBox("Are you sure you want to Exit ?", vbYesNo)
If result = vbYes Then
me.Close()
End If

If MessageBox.Show("¿Exit?", "Application, MessageBoxButtons.YesNo, _
MessageBoxIcon.Question) = DialogResult.No Then
e.Cancel = True
End If

I think it is more clean and simply!
If MsgBox("Are you sure you want to Exit ?", vbYesNo) = vbNo Then e.Cancel = True

This code may not be 'efficient' but allows the user to save their work before closing, close the form if they press 'No' or return back to the form without closing if they press 'Cancel'.
Dim dialog As DialogResult
dialog = MessageBox.Show("Save before closing?", "Exit", MessageBoxButtons.YesNoCancel)
If dialog = DialogResult.Yes Then
'Put a save file dialog here or Button.PerformClick() if you already have a save button programmed
ElseIf dialog = DialogResult.No Then
Application.Exit()
ElseIf dialog = DialogResult.Cancel Then
e.Cancel = True
End If

Related

How to prevent a form from closing in btnClose_Click

I am trying to prevent the user from closing the form when the DialogResult.No is True in vb.net. I also tried e.cancel=true but it does not work in btnClose_click. I mentioned that is not FormClosingEventArgs. I want put it in btnClose_Click.
Code copied from OP comment;
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
If CustomMessageBox.Show("Are You Sure?", Buttons.YesNo, Icons.Question,
AnimateStyle.ZoomIn) = Windows.Forms.DialogResult.Yes Then
If Windows.Forms.DialogResult.Yes Then
' ---Close The Form
End If
ElseIf Windows.Forms.DialogResult.No Or Windows.Forms.DialogResult.None Then
' ---Not Closing the Form
End If
End Sub
You need to use the FormClosing Event (or Closing befoce NET 2.0). This Event occurs before the close event and can be canceled.
Private Sub Form1_Closing(sender As Object, e As FormClosingEventArgs ) Handles Me.FormClosing
If CustomMessageBox.Show("Are You Sure?", Buttons.YesNo, Icons.Question,
AnimateStyle.ZoomIn) = Windows.Forms.DialogResult.Yes Then
e.Cancel = true ' <<<< close event will not occur, form stays open
End If
End Sub
FormClosing Event

Close Application with FormClosing Event VB.net

I try to exit my application with form closing event but confirmation message box appears twice.
This is what I have:
Private Sub FrmMainPlatform_FormClosing(sender As Object, e As FormClosingEventArgs) _
Handles MyClass.FormClosing
Dim result As Integer
result = MessageBox.Show("Are you want to close", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.None)
If (result = DialogResult.No) Then
e.Cancel = True
Else
Application.Exit()
End If
End Sub
I also tried with this solution:
Private Sub FrmMainPlatform_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Select Case MessageBox.Show("Are you sure you want to exit?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
Case Windows.Forms.DialogResult.Yes
'nothing to do here the form is already closing
Case Windows.Forms.DialogResult.No
e.Cancel = True 'cancel the form closing event
'minimize to tray/hide etc here
End Select
End Sub
The form is closed but the application i still running.
#karihalan, I believe, you first need to make sure that the Form1 is actually the startup form of your application. You can confirm this from Project's properties. If so, then you don't even need to call Application.Exit().
Second, try replacing Me.FormClosing with MyBase.FormClosing... Like so:
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
Also, make sure you are not subscribing to form closing event twice, maybe using Addhandler statement.
Hope this would help.
UPDATE: You can try this to close all forms. I would put it in the main formclosing event.
For each f as Form in My.Application.OpenForms
f.Close()
Next
Get rid of that first codeblock. This is what I did and it asked my if I wanted to close only once and it closed when I clicked yes and didn't when I said no.
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Select Case MessageBox.Show("Are you sure you want to exit?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
Case Windows.Forms.DialogResult.Yes
'nothing to do here the form is already closing
Case Windows.Forms.DialogResult.No
e.Cancel = True 'cancel the form closing event
'minimize to tray/hide etc here
End Select
End Sub
Private Sub FrmMainPlatform_FormClosing(sender As Object, e As FormClosingEventArgs) _
Handles Me.Closing
Dim result As Integer
result = MessageBox.Show("Are you want to close", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.None)
If (result = DialogResult.No) Then
e.Cancel = True
Else
Application.Exit()
End If
End Sub
Hi,
I got temporary solution for this issue. The Exit method does not raise the Closed and Closing events, which are obsolete as of .NET Framework 2.0
Perhaps your application has more than one form, whenever you apply a closing event on a startup form it will be repeated as much as the number of forms you have. I have faced the same issue and got it solved by changing the event handles on the other forms Not the startup one just like the example below:
From:
Handles Me.Closing
To:
Handles MyBase.Closing

windows form not closing when message box is yes

This is my code:
Private Sub frmName_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If e.CloseReason = CloseReason.UserClosing Then
If MessageBox.Show("Are you sure you want to logout?", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
Me.Close()
Else
e.Cancel = True
End If
End If
End Sub
If I click no it will cancel the form closing, but when I click yes the message box will appear repeatedly. What i want to happen is when I click the close button, and clicked yes it will close the form. How can I fix this?
As the Form is already closing, there is no need to call Close() again. The following code should work:
Private Sub frmName_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If e.CloseReason = CloseReason.UserClosing Then
If MessageBox.Show("Are you sure you want to logout?", _
"Exit", MessageBoxButtons.YesNo, _
MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then
e.Cancel = True
End If
End If
End Sub

Confirming program close with a messagebox

I have a message box that pops up when i press a close button that basicaly says" Are you sure you want to quit" but when i click the no button or cancel but the program closes any how
this is my code:
'Close Button
Private Sub BtnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnClose.Click
Dim result = MessageBox.Show(" Are you sure you want to quit", "Are you sure?", MessageBoxButtons.YesNoCancel)
Me.Close()
End Sub
You are doing nothing with the value of result. You need to inspect the value and determine whether you call Me.Close(). Code approximately
If result = DialogResult.Yes Then
Me.Close()
End If
If you are using then message box to prevent accidental form close, your approach may not work always. The message box will not be shown if the user closes the application in any other way than clicking the "Close" button.
Try using the FormClosing event.
'Close Button
Private Sub BtnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnClose.Click
Me.Close()
End Sub
'FormClosing Event
Private Sub MyForm_Closing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If MessageBox.Show(" Are you sure you want to quit", "Are you sure?", MessageBoxButtons.YesNoCancel) <> DialogResult.Yes
e.Cancel = True
End If
End Sub
You issue Me.Close() no matter what the result is. Check the result and execute Me.Close() only the user clicks Yes
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
If MsgBox("Are you sure you want to quit?", MsgBoxStyle.YesNo Or MsgBoxStyle.DefaultButton2, "Close application") = Windows.Forms.DialogResult.Yes Then
Me.Close()
End If
End Sub
Copy this:
Dim result = MessageBox.Show(" Are you sure you want to end the Application", "School Management System", MessageBoxButtons.YesNoCancel)
If result = DialogResult.Yes Then
Me.Close()
End If
Dim result = MessageBox.Show(" Are you sure you want to quit", "System Reminder", MessageBoxButtons.YesNo)
If result = DialogResult.Yes Then
Me.Close()
End If
If it is a child form, it opens as a result of a button in a main form:
If MessageBox.Show(" Are you sure you want to exit the application ? ", "Exit ?", MessageBoxButtons.YesNo) = DialogResult.Yes Then
Me.Hide() : MainForm.Show()
Else
e.Cancel = True
End If
You can use the following code:
Dim closingfrm = MsgBox(" Are you sure to close", MsgBoxStyle.YesNo)
If closingfrm = DialogResult.Yes Then
Application.Exit()
End If

Cancel form closing by user selection

In a vb.net windows application, I need user to confirm before closing application. I have this code in FormClosing event
If BackgroundWorker1.IsBusy Then
Dim UserSelection As Integer = MsgBox("Do you want Cancel Processing and Exit Application?", MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, "Exit Application")
If UserSelection = 6 Then
BackgroundWorker1.CancelAsync()
e.Cancel = True
Else
????
End If
End If
How can I cancel form closing if user clicked No?
Tried e.Cancel = false but it didn't work (exits application).
e.Cancel = True would stop the form closing.
According to documentation "e.Cancel = True" PREVENTS the form from closing
This is full code for cancel form closed. We should use FormClosing Event.
Private Sub Frm1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If MessageBox.Show("Do you want to closed", Me.Text, MessageBoxButtons.OKCancel) = Windows.Forms.DialogResult.Cancel Then
e.Cancel = True
End If
End Sub