Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/07/2011, 18:38
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Formulario MdiChildren no cierra, queda residente.

Tengo una aplicación hecha en Visual Studio.Net 2005, más exactamente en Visual Basic.Net 2005, la cual tiene un formulario base y 42 formularios que se instancian en forma dinámica, cada uno de los cuales es MdiChildren del principal.
Cuarenta (40) de estos formularios se abren y cierran perfectamente según lo esperado. Pero dos de ellos no, y no consigo saber por qué.
La cosa es así:
- Hay una barra lateral que se usa para seleccionar el Form a instanciar y mostrar. La misma es un OCX libre cuyo NameSpace es vbAccelerator.
- Cuando se selecciona una de las opciones, se recurre a un Select Case que en cada caso invoca una variable Friend para ese formulario. En esa Case hay un código como este:
Código vb:
Ver original
  1. Case "DESCARGAS ANALIZADAS"
  2.                     oListDescargas = New FormListadoDescargas
  3.                     aForms = oListDescargas
  4.                     With oListDescargas
  5.                         .MdiParent = Me
  6.                         .Dock = DockStyle.Fill
  7.                         .Show()
  8.                     End With
- aForms es una variable de clase Form, cuyo objetivo es simplificar al código de cierre, que se invoca antes de abrir un formulario:
Código vb:
Ver original
  1. If Not aForms Is Nothing Then
  2.             aForms.Close()
  3.         End If
- Cada vez que se selecciona otro formulario, previamente se verifica que no haya uno abierto y de haberlo, este se cierra con esa llamada.
- Los 40 formularios mencionados funcionan bien. Cuando se debuggea en ese punto se puede ver cómo todos los Form van desapareciendo efectivamente.
- Cuando se trata de estos dos formularios, en el debugeo se puede ver que reconoce que está instanciado y que efectivamente invoca al .Close, pero no produce ningún efecto. Nada.
- Si en el debuggeo verifico el valor de Me.MdiChildren, se puede ver que cada vez que se llama a uno de esos formularios, la colección de Me.MdiChildren se va incrementando de a uno, y se puede apreciar que el nombre de la clase que se acumula se corresponde con el Form invocado, así que efectivamente no los está eliminando como a los demás.
- Los dos formularios en cuestión sólo tienen en común que contienen un Control OCX freeware (PieChart) para representar un grafico estadístico de torta (pie). Pero si elimino el objeto del formullario, aún así sigue sucediendo lo mismo, por lo que no parece ser ese el problema.

En definitiva, dos preguntas:
- ¿Alguna idea de por qué el .Close no está funcionando?
- ¿De qué forma puedo forzar a un form que no responde a cerrarse?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/07/2011 a las 18:51