Visual Basic.NET - Problema con me.dispose

 
Vista:

Problema con me.dispose

Publicado por Raúl Hernández (4 intervenciones) el 19/04/2007 22:45:21
Hola a todos, si alguien puede resolver el siguiente problema, gracias:

Tengo un Formulario (en visual basic .net 2005) llamado menu_principal, desde el cual abro otro llamado menu_p así:
============================================================================================================
'---------------------------------------------------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cuadro2.Click
on error goto tratar_error
'seguir es una variable global declarada en un módulo global del proyecto, que se ha colocado en true
seguir=true

Dim aux as new menu_p
aux.ShowDialog
'----------------------------------------
exit sub
tratar_error
MsgBox(Err.Description, MsgBoxStyle.Information, "Mensaje del Sistema")
end sub
'---------------------------------------------------------------------------------------------------------

en El formulario 2 en el evento activated hay una animación que muestra
dos imágenes a intervalos en un picturebox llamado "cuadro" así:
'---------------------------------------------------------------------------------------------------------
Private Sub menu_p_Activated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Activated
Dim tiempofinal as single

'seguir es una variable global declarada en un módulo global del proyecto, que se ha colocado en true

while seguir=true
'Cargar la primera imagen
me.cuadro.image=image.fromfile("c:\imagen1.bmp")

'-------------------------------------------
'----detener 0.5 segundos
tiempofinal=Microsoft.VisualBasic.Timer+0.5
While (Microsoft.VisualBasic.Timer < tiempofinal and seguir=true)
Application.DoEvents()
wend
'-------------------------------------------

'Cargar la segunda imágen imagen
me.cuadro.image=image.fromfile("c:\imagen2.bmp")

'-------------------------------------------
'----detener 0.5 segundos otra vez
tiempofinal=Microsoft.VisualBasic.Timer+0.5
While (Microsoft.VisualBasic.Timer < tiempofinal and seguir=true)
Application.DoEvents()
wend
'-------------------------------------------
wend

'-------------------------------------------------------
'-->esta es la instrucción que aparentemente genera error
me.dispose
'-------------------------------------------------------
end sub
'---------------------------------------------------------------------------------------------------------

Hay un botón para salir del formulario menu_p así:

'---------------------------------------------------------------------------------------------------------
Private Sub salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Picture3.Click
seguir=false
end sub
'---------------------------------------------------------------------------------------------------------

al oprimirlo se genera en el procedimiento Button1_Click de menu_priniciapal el siguiente mensaje de error:

"No se puede obtener acceso al objeto denominado "menu_p".
Nombre del objeto: "menu_p".

Al oprimir nuevamente Button1, se abre al parecer el formulario menu_p y desaparece rápidamente y allí se traba el programa.

La idea de abrir el formulario descrito, es tener en cada momento un solo formulario
al que pueda acceder el usuario.

La pregunta es: como descargar totalmente el formulario menu_p y que no se produzca el error
anterior que daña el programa.

Nota: si abro el segundo formulario con el otro método (Form.Show)

ofrezco disculpas por haberme extendido tanto en la explicación, espero entiendan la pregunta
y la puedan resolver.
=================================================================================================
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con me.dispose

Publicado por thessen (298 intervenciones) el 20/04/2007 08:54:53
Tu problema se debe a que declaras la variable Aux, que instancia a menu_p, dentro del evento del boton. Prueba de declararla a nivel de formulario (del menu_principal)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con me.dispose

Publicado por Raul Hernández (4 intervenciones) el 20/04/2007 15:18:42
'-------------------------------------------------------------------------------------------------------------------------
Hola thessen, tu aporte a mi problema es significativo, gracias!; te cuento que luego de revisar un poco más, me he dado cuenta que se puede resolver el problema abriendo el formulario menu_p (el que tiene la animación en el evento Load), con el método Show en lugar del método ShowDialog.

Adicionalmente, hay que quitar la animación del evento activate del formulario menu_p y dejarlo como un procedimiento (por ejemplo "Sub MostrarAnimacion" del formulario menu_p, llamando desde el botón que llama a menu_p (boton 1 del formulario menu_principal) a ese procedimiento luego de cerrar con me.close a menu_principal así:

'---------------------------------------------
Dim aux as new menu_p
aux.show

aux.MostrarAnimacion
aux.close
'---------------------------------------------

La conclusión de esto podría ser que:

Si se quiere mantener abierto un solo formulario en cada momento, y además si se van a mostrar animaciones que utilizan bucles, la recomendación es que no se coloquen dichas animaciones (o bucles en general) dentro del evento activate o Load de los formularios, ya que estos mantienen el control, e impiden que se refresque la pantalla, entre otras cosas.
'-------------------------------------------------------------------------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar