:) Aca de nuevo ---- Cerrar programa y liberar todas las variables

Iniciado por luis456, 21 Noviembre 2014, 08:47 AM

0 Miembros y 1 Visitante están viendo este tema.

luis456

Hola

Tengo esto para cerrar el programa ,pero recién me doy cuenta que algunas variables no se liberan ya que cuando lo vuelvo a ejecutar me suma los anteriores datos.cuando debería ser de cero,

que le faltaria a esto para liberar todo ?  

Código (vbnet) [Seleccionar]
Private Sub CerrarProgramaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CerrarProgramaToolStripMenuItem.Click
       If MessageBox.Show("Esta seguro que desea Cerrar la aplicacion", "Cerrar ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

           Me.Close()

       End If



Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

#1
Buenas

1) Muestra las declaraciones de dichas variables, y la parte del código donde accedes a esa variable esperando que sea "0".

2) ¿Ese es el único y principal Form de la aplicación?, ya que en tal caso estás terminando la aplicación correctamente.

Las variables (normales) solo existen durante la instancia del Form/Class donde se encuentren, y si ese es el Form principal entonces todo tipo de variable/objeto solo existe mientras la app esté en ejecución, es decir, si terminas la app y la vuelves a iniciar toda variable debería volver a su valor por defecto (ya sea este valor "0" o el valor que le asignaste por defecto),
de todas formas no se si ese es el Form principal o un Form secundarío ni si estás usando variables compartidas u otra cosa, así que prueba a utilizar el evento FormClosing para "resetear" las variables, aunque esto no es necesario en caso de que solo tengas un Form en tu aplicación:

Form1:
Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) _
   Handles MyBase.Shown

       Form2.Show()
       Debug.WriteLine(String.Format("Valor de 'Var' despues de cargar el Form2: {0}", CStr(Form2.var))) ' 5

       Form2.Close()
       Debug.WriteLine(String.Format("Valor de 'Var' despues de cerrar el Form2 de forma normal: {0}", CStr(Form2.var))) ' 5

       Form2.Close(resetVars:=True)
       Debug.WriteLine(String.Format("Valor de 'Var' despues de cerrar el Form2 de forma alterna: {0}", CStr(Form2.var))) ' 1

   End Sub

End Class


Form2:
Código (vbnet) [Seleccionar]
Public Class Form2

   ' Declaro e inicializo la variable con el valor por defecto "1".
   Public Shared var As Integer = 1

   Private Sub Form2_Load(ByVal sender As Object, ByVal e As EventArgs) _
   Handles MyBase.Load

       ' Cambio el valor de Var al cargar este Form.
       var = 5

   End Sub

   Public Overloads Sub Close(ByVal resetVars As Boolean)

       If resetVars Then ' reseteo la variable a su valor or defecto.
           var = 1
       End If

       ' Llamo al método close de la clase base.
       MyBase.Close()

   End Sub

End Class


PD: Otra cosa que puedes hacer (en caso de que sea un Form secundario) es utilizar el método Form.Dispose, con esto se liberan sus recursos.

Saludos








luis456

Bien el problema  creo haberlo resuelto con :

Código (vbnet) [Seleccionar]
Me.Refresh()

ya que como dice Elektro estaba cerrando bien el Form ya que es  unico :)

Código (vbnet) [Seleccionar]
Me.Close()


Luis
Que tu sabiduria no sea motivo de Humillacion para los demas