MDIParent.Invoke e MDIChild.Show

Avete mai provato da una Windows Form MDIParent temporanemanete invisibile a fare lo Show di un MDIChild? Fin qui nessun problema, ma se vi trovaste all'interno di un altro thread e doveste fare lo Show del Child usando MDIParent.Invoke?
Ottereste una bella:
Eccezione non gestita di tipo "System.StackOverflowException" in mscorlib.dll
Cause: ...boh...
Possibili soluzioni:
Ereditate le vostre Form MDIChild da questa:

Public Class BaseMDIChild

  Inherits System.Windows.Forms.Form

  Public Shadows Sub Show()

    If Not Me.MdiParent Is Nothing Then

      If Me.MdiParent.Visible Then

        MyBase.Show()

      Else

        AddHandler Me.MdiParent.VisibleChanged, DelParentVisibleChanged

      End If

    End If

  End Sub

  Private DelParentVisibleChanged As EventHandler = AddressOf ParentVisibleChanged

  Private Sub ParentVisibleChanged(ByVal sender As Object, ByVal e As EventArgs)

    If Me.MdiParent.Visible Then

      Me.Show()

      RemoveHandler Me.MdiParent.VisibleChanged, DelParentVisibleChanged

    End If

  End Sub

End Class

Print | posted on martedì 5 ottobre 2004 14:32

Comments have been closed on this topic.