Hello all,

I am working on a project in VS2012 that should be compatbile with Windows XP.

this is the code by alexkai

Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then DisposeShapeContainer(ShapeContainer1)
        If disposing AndAlso components IsNot Nothing Then
        End If
    End Try
End Sub
Protected Sub DisposeShapeContainer(ByVal AShapeContainer As Microsoft.VisualBasic.PowerPacks.ShapeContainer)
    If AShapeContainer IsNot Nothing Then
        If AShapeContainer.Shapes IsNot Nothing Then
            Dim tshapes As New Generic.List(Of Microsoft.VisualBasic.PowerPacks.Shape)
            For Each tshape As Microsoft.VisualBasic.PowerPacks.Shape In AShapeContainer.Shapes
            For Each tshape As Microsoft.VisualBasic.PowerPacks.Shape In tshapes
        End If
    End If
End Sub

this method is called by Form.Close, and it runs fine.
after Form.Close is called by Form.Dispose and the method starts again, this generates an exception "Object reference not set to instance of an object" because it has been previously destroyed by Form.Close.

To avoid this thing, my solution, maybe not one of the brightest, was to modify two lines of the method.
The first, changing ByVal to ByRef (directly to refer to the object concerned and not to a copy)

Protected Sub DisposeShapeContainer(ByRef AShapeContainer As Microsoft.VisualBasic.PowerPacks.ShapeContainer)

and I added this at the end, after AShapeContainer.Dispose()

AShapeContainer = nothing

to mark the current object as Nothing, to exit from this is if the Object is set to Nothing

If AShapeContainer IsNot Nothing Then

If someone has a better solution would be nice to be able to show! I'm working on something more refined I will publish when ready.

I'm sorry for my not "perfect" English.