Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to close all opened forms in visual basic

I want it so when my button is clicked, I exit my application. I tried a simple for loop:

Private Sub CloseAllToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CloseAllToolStripMenuItem.Click
    For Each Form In My.Application.OpenForms
        Form.Close()
    Next
End Sub

But after closing all forms besides the form with this button on it, I get this error:

An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll Additional information: Collection was modified; enumeration operation may not execute.

I believe this is because I close the form executing the code before the loop can go to the next form. If this is the case, how can I make it so my loop finishes once the last form is closed? Can I even do that?

like image 906
Klink45 Avatar asked Jan 17 '16 23:01

Klink45


2 Answers

Close all but current form:

My.Application.OpenForms.Cast(Of Form)() _
              .Except({Me}) _
              .ToList() _
              .ForEach(Sub(form) form.Close())

Close application normally:

Application.Exit()

Force application to exit:

Environment.Exit(1)
like image 157
Reza Aghaei Avatar answered Oct 14 '22 21:10

Reza Aghaei


This is simple, just add a validation:

        For Each Form In My.Application.OpenForms
            If Form.name <> Me.Name Then
                Form.Close()
            End If
        Next
like image 43
user8056176 Avatar answered Oct 14 '22 21:10

user8056176