Foros del Web » Programación para mayores de 30 ;) » .NET »

rutina para el cierre del programa

Estas en el tema de rutina para el cierre del programa en el foro de .NET en Foros del Web. Hola estimados amigos Soy nuevo en esto de programar (aunque soy un vejete en edad 52 jovenes años) aunque he hecho mis pinitos en el ...
  #1 (permalink)  
Antiguo 02/12/2011, 21:10
Avatar de catanzaro99  
Fecha de Ingreso: diciembre-2011
Ubicación: Moreno Buenos Aires
Mensajes: 21
Antigüedad: 13 años
Puntos: 2
rutina para el cierre del programa

Hola estimados amigos

Soy nuevo en esto de programar (aunque soy un vejete en edad 52 jovenes años)
aunque he hecho mis pinitos en el viejo y querido Basic y Qbasic (cuantos recuerdos)
Ahora que estoy jubilado (a la fuerza) se me dió por aprender (autodidacticamente hablando) Visual Basic.
Cuento con el VB 2008 (Gracias a Jhony) y estoy programando (y practicando) para hacer un programa de Administración Escolar.
El tema que no puedo resolver (aunque no es muy importante) es el de poner un aviso que alerte a los usuarios cuando intentan cerrar el programa mediante un MessageBoxButtons.YesNo
la duda es que scree una pequeña rutina:

Código vb:
Ver original
  1. Dim Caption As String = " ATENCIÓN!!!  "
  2.         Dim Message As String = "Está a punto de cerrar el programa. ¿Seguro que quiere salir?  "
  3.         Dim Buttons As Integer = MessageBoxButtons.YesNo
  4.         Dim Result As DialogResult
  5.  
  6.         'Exhibe un Mensaje con ícono de ? Con dos botones SI/NO con seleccion default en No.
  7.  
  8.         Result = MessageBox.Show(Me, Message, Caption, MessageBoxButtons.YesNo, _
  9.             MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
  10.  
  11.  
  12.         ' Obtiene el resultado de la pantalla de mensaje.
  13.  
  14.         If Result = System.Windows.Forms.DialogResult.Yes Then
  15.             ' Cierra el formulario principal.
  16.            Application.Exit()
  17.             Me.Close() 'Tambien se puede utilizar esta sentencia  
  18.         '                  Que cierra el formulario actual si actual es el formulario principal
  19.         End If

Si bien la rutina funciona a la perfección, tengo dos pequeños problemas que no logro resolver
1) Si coloco la rutina dos veces (en el evento Form1_FormClosing y en un boton salir evento Button1_Click) el evento se repite dos veces (y hasta tres si utilizo Me.Close() para cerrar el form.)
2) Me gustaria crear un solo evento que se pueda llamar desde todos los forms, supongo que mediante una clase, pero no se como hacerlo, si me pueden orientar quedaría eternamente agradecido (ojo que no quiero me hagan todo el código, si me guían como hacerlo es suficiente, pero recuerden que mis neuronas estan oxidadas...)

aquí dejo todo el código de un form para que lo analicen y me digan que es lo que estoy haciendo mal:

Código vb:
Ver original
  1. Public Class Form1
  2.  
  3.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.         'LoginForm1.Show()
  5.        Dim Caption As String = " ATENCIÓN!!!  "
  6.         Dim Message As String = "Esta a punto de cerrar el programa. ¿Seguro que quiere salir?  "
  7.         Dim Buttons As Integer = MessageBoxButtons.YesNo
  8.         Dim Result As DialogResult
  9.  
  10.         'Exhibe un Mensaje con ícono de ? Con dos botones SI/NO con seleccion default en No.
  11.  
  12.         Result = MessageBox.Show(Me, Message, Caption, MessageBoxButtons.YesNo, _
  13.             MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
  14.  
  15.  
  16.         ' Obtiene el resultado de la pantalla de mensaje.
  17.  
  18.         If Result = System.Windows.Forms.DialogResult.Yes Then
  19.             ' Cierra el formulario principal.
  20.            Application.Exit()
  21.             'Me.Close() 'Tambien se puede utilizar esta sentencia que cierra el formulario actual
  22.            '           si actual es el formulario principal
  23.        End If
  24.  
  25.     End Sub
  26.  
  27.        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
  28.  
  29.         Dim Caption As String = " ATENCIÓN!!!  "
  30.         Dim Message As String = "Esta a punto de cerrar el programa. ¿Seguro que quiere salir?  "
  31.         Dim Buttons As Integer = MessageBoxButtons.YesNo
  32.         Dim Result As DialogResult
  33.  
  34.         'Exhibe un Mensaje con ícono de ? Con dos botones SI/NO con seleccion default en No.
  35.  
  36.         Result = MessageBox.Show(Me, Message, Caption, MessageBoxButtons.YesNo, _
  37.             MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
  38.  
  39.  
  40.         ' Obtiene el resultado de la pantalla de mensaje.
  41.  
  42.         If Result = System.Windows.Forms.DialogResult.Yes Then
  43.             ' Cierra el formulario principal.
  44.            Application.Exit()
  45.             'Me.Close() 'Tambien se puede utilizar esta sentencia que cierra el formulario actual
  46.            '           si actual es el formulario principal
  47.        End If
  48.  
  49.     End Sub
  50. End Class

Gracias...
  #2 (permalink)  
Antiguo 03/12/2011, 07:35
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
Puntos: 53
Respuesta: rutina para el cierre del programa

Hola, si estás aprendiendo con el VB2008, debes efectuar tus consultas en el foro de VB NET ya que este es de nuestro querido VB Clásico

Probablemente, algun administrador te lo cambié allí, pero por si quieres ir ganando tiempo.

Un saludo y bienvenido entre todos nosotros.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 03/12/2011, 08:43
Usuario no validado
 
Fecha de Ingreso: junio-2010
Ubicación: Guatemala
Mensajes: 196
Antigüedad: 14 años, 5 meses
Puntos: 25
Mensaje Respuesta: rutina para el cierre del programa

Saludos,
  • Felicitaciones por ese animo en seguir aprendiendo
  • Para el formulario principal, solamente necesitas colocar el código en el evento FormClosing y en el botón debes invocar el método Close del formulario.
  • Si se cierra el formulario principal y aceptan en el MessageBox, se cerraran todos los demás formularios; si estos formularios tienen la validación de salida, te mostrará un MessageBox por cada formulario que tengas abierto.

Código vb:
Ver original
  1. Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
  2.     Me.Close()
  3. End Sub
  4.  
  5. Private Sub mainForm_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
  6.  
  7.     Dim r As DialogResult
  8.     r = MessageBox.Show("Está a punto de cerrar el programa. ¿Seguro que quiere salir?", _
  9.                         " ATENCIÓN!!!  ", _
  10.                         MessageBoxButtons.YesNo, _
  11.                         MessageBoxIcon.Question, _
  12.                         MessageBoxDefaultButton.Button2, _
  13.                         MessageBoxOptions.RightAlign)
  14.  
  15.     If r = DialogResult.No Then
  16.         e.Cancel = True
  17.     Else
  18.         Dim i As Integer
  19.         For i = Application.OpenForms.Count - 1 To 1 Step -1
  20.             Dim frm As Form = Application.OpenForms(i)
  21.             If frm IsNot Me Then
  22.                 frm.Close()
  23.             End If
  24.         Next
  25.     End If
  26. End Sub

Espero que te sea de utilidad
  #4 (permalink)  
Antiguo 06/12/2011, 17:55
Avatar de catanzaro99  
Fecha de Ingreso: diciembre-2011
Ubicación: Moreno Buenos Aires
Mensajes: 21
Antigüedad: 13 años
Puntos: 2
Respuesta: rutina para el cierre del programa

Hola Jonathan

En principio dejame pedirte disculpas por la demora en la respuesta, pero estuve alejado unos días y sin acceso a Internet.
Gracias por la rutina que me enviastes, funciona de maravillas (aunque solo en el form1 ya que si la duplico en cualquiera de los otros form's tal cual me lo avisastes, se abre un MessageBox por cada form abierto...

De allí surge mi otra pregunta ¿Se puede crear una Classe para que pueda ser llamada desde cualquier form desde el que se quiera cerrar el programa y realizar la rutina de cierre solo una vez para todos los form's (es decir una Application.Exit única)?

Nuevamente gracias, me fué realmente útil tu explicación y sigo analizándola... (para lubricar las neuronas jeje)


PD: Si el Moderador del foro o alguien quiere mover el mensaje al foro que le corresponda le estaré agradecido...

Última edición por catanzaro99; 06/12/2011 a las 17:59 Razón: agregar PosData
  #5 (permalink)  
Antiguo 06/12/2011, 21:14
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 9 meses
Puntos: 1329
Respuesta: rutina para el cierre del programa

Hola catanzaro99,

Siendo que usas VB 2008 te paso el tema al foro Adecuado

Saludos
__________________
Grupo Telegram Docker en Español
  #6 (permalink)  
Antiguo 07/12/2011, 07:32
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 14 años, 5 meses
Puntos: 267
Respuesta: rutina para el cierre del programa

Hola catanzaro99
  • Reiterarte la Bienvenida al Foro!! .
  • Si mas no me equivoco tu quieres salir de la aplicación desde cualquier form, si es eso cierto lo que te puedo dar es esta linea de código :
Código vb:
Ver original
  1. System.Environment.Exit(0)

Esperamos que tu actividad por el foro séa mas seguida. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #7 (permalink)  
Antiguo 07/12/2011, 08:49
Avatar de catanzaro99  
Fecha de Ingreso: diciembre-2011
Ubicación: Moreno Buenos Aires
Mensajes: 21
Antigüedad: 13 años
Puntos: 2
Respuesta: rutina para el cierre del programa

Hola Carlangueitor

Gracias por mover el tema, seguramente aquí lograré respuestas mas específicas...

Hola Aquaventus

Gracias por responder

En principio si bien lo que quiero es cerrar la aplicación desde cualquier form, el tema está en que quiero que antes de que se cierre el programa, se le envíe un mensaje de alerta el usuario, donde se le avise que está por cerrar la aplicación.
Yo creé una rutina en la que, mediante un MessageBoxButtons.YesNo se le avisa al usuario el cierre de la aplicación y este puede decidir si continua o cierra.
Con el aporte de JonathanB, la rutina mejoró, ya que al principio el MessageBox, se abria en multiples oportunidades y con la rutina nueva solo lo hace una vez (aunque funciona bien solo en el form1).
Ya que si pongo esta rutina en cualquier otro form, el MessageBox aparece tantas veces como form's abiertos tenga.

Lo que me planteo es hacer una llamada a un Class (desde cualquier form) que ejecute la rutina y si el usuario decide cerrar la aplicación, cierre todos los form's obviando la repeticion de la rutina.

Vale decir: Supongamos que tengo abiertos tres form's (form1, form2 y form3)
y desde el form3 se pide cerrar la aplicación (sea desde un button o desde el FormClosing) la acción del ButtonClick sea llamar al Class que maneja la rutina de cierre y mediante el MessageBoxButtons.YesNo si el usuario decide NO cerrar la plicación retorne al form que llamo la Class.
Pero si el usuario SI decide cerrar la aplicación, se ejecute Applicacion.Exit sin que se vuelva a llamar al Class.

Se entiende o me estoy complicando???
  #8 (permalink)  
Antiguo 09/12/2011, 21:16
Avatar de catanzaro99  
Fecha de Ingreso: diciembre-2011
Ubicación: Moreno Buenos Aires
Mensajes: 21
Antigüedad: 13 años
Puntos: 2
Respuesta: rutina para el cierre del programa

Gracias a todos los que me ayudaron con este problema...

Al fin y al cabo lo resolví creando un cierre de Sesion de usuaro, ya que para usar todas las funcionalidades del programa es imprescindible loguearse, entonces aprovechando esto lo que se realiza es una finalización de sesión y se deriva al usuario al form1 (que es el único en el que no es necesario estar logueado) y desde alli si el usuario quiere cerrar el programa, pues utilizo la rutina de cierre (aportada por JohathanB... Gracias amigo...)

Gracias a todos los que aportaron su granito de arena...

Nos vemos...

Etiquetas: basic, cierre, programa, rutina, vb, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:10.