Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: luis456 en 21 Noviembre 2014, 08:47 AM

Título: :) Aca de nuevo ---- Cerrar programa y liberar todas las variables
Publicado por: luis456 en 21 Noviembre 2014, 08:47 AM
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
Título: Re: :) Aca de nuevo ---- Cerrar programa y liberar todas las variables
Publicado por: Eleкtro en 21 Noviembre 2014, 19:23 PM
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
Título: Re: :) Aca de nuevo ---- Cerrar programa y liberar todas las variables
Publicado por: luis456 en 22 Noviembre 2014, 12:44 PM
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