Search code examples
.netvb.netwinformsunhandled-exception

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?


Solution

  • 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)