Tengo que realizar una serie de instrucciones al cerrar un formulario, tengo
un botón de salir y hay no habría problema pero si el usuario cierra el
formulario con el botón cerrar de windows no ejecuta estás acciones. He
estado mirando algún evento del formulario pero no encuentro cual sería el
adecuado.
Espero que me puedan hechar una mano.
Muchísimas gracias
"Elisa" <El...@discussions.microsoft.com> escribió en el mensaje
news:3F014126-B544-461E...@microsoft.com...
> Lo he probado pero como tengo que borrar un registro de una tabla, se me
> queda colgado y además si le pulso el botón que he puesto para salir me
> ejecuta la acción dos veces.
Hola, Elisa:
Para que el evento «FormClosing» no se ejecute dos veces, tendrás que crear
un campo en el formulario para saber si se ha pulsado o no el botón de
Salir:
Private _pulsadoBotonSalir As Boolean
Ahora, en el botón «Salir» establecerías su valor a «True»:
Private Sub btnExit_Click( ... )
' Se ha pulsado el botón de salir
'
_pulsadoBotonSalir = True
' Ejecutamos las acciones oportunas
'
' ....
' Cerramos el formulario
'
Me.Close()
End Sub
Y en el evento «FormClosing» ejecutarías lo siguiente:
Private Sub Form1_FormClosing( ... )
' Si no se ha pulsado el botón de salir ...
'
If Not _pulsadoBotonSalir Then
' ...ejecutamos el cdigo existente en dicho botón
'
btnExit_Click(Nothing, Nothing)
End If
End Sub
Y en cuanto a que se te queda "colgado" cuando eliminas el registro de la
tabla, tendrás que averiguar el motivo de que ello suceda, porque no creo
que se deba por ejecutar el código que te he comentado. :-)
Un saludo
--
Enrique Martínez
[MS MVP - VB]
Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
disculpas por la intromision, pero solo una pregunta para Enrique de
algo que me ha despertado la curiosidad =>
> ....
> ' ...ejecutamos el cdigo existente en dicho botón
> '
> btnExit_Click(Nothing, Nothing)
> .....
¿cual es el motivo de pasarle Nothing a los parametros? ¿es lo suyo
cuando ejecutamos un procedimiento de evento de esta forma
[llamandolo]?
bueno, lo dicho, solo porque me ha llamado la atencion y me parece
interesante (aunque lo mismo es una obviedad, pero hasta ahora, o no
lo habia visto o no me habia fijado)
un saludo :-)
Ivan
> ¿cual es el motivo de pasarle Nothing a los parametros? ¿es lo suyo
> cuando ejecutamos un procedimiento de evento de esta forma
> [llamandolo]?
¡Hombre! Puede ser que sea lo suyo cuando se llama al procedimiento de
evento «Click» desde cualquier parte de nuestro código existente en nuestro
proyecto. Digamos que es para diferenciar la llamada al propio evento
«Click» que se produce cuando el usuario hace clic con el ratón sobre el
propio control. Pero, ¡vamos! Que si lo deseas, puedes pasarle la referencia
de un control DataGridView, de un control TextBox, o la del propio control
Button, porque en definitiva, el parámetro «sender» se encuentra definido
como «Object», por tanto, acepta cualquier clase derivada de Object, que son
practicamente todas las clases existentes en el marco de trabajo de .net, o
aquellas que nosostros mismos podemos crear:
btnExit_Click(btnExit, Nothing)
Otro tanto de lo mismo sucedería con el parámetro « e » del procedimiento,
al cual se le puede pasar un objeto del tipo System.EventArgs o que herede
de éste. Como es nuestro código el que llama al evento «Click» y no la
acción del usuario, no tiene mucho sentido pasarle un nuevo objeto
EventArgs, aunque tampoco nada lo impide:
btnExit_Click(btnExit, New EventArgs)
También le puedes pasar el valor «Empty», que es el nombre del único campo
compartido (Shared) del que dispone la clase System.EventArgs:
btnExit_Click(Button1, EventArgs.Empty)
Antes que me lo preguntes, te diré que el valor de «EventArgs.Empty»
representa un evento sin datos del propio evento, y equivale al resultado de
llamar al constructor o procedimiento New de la clase EventArgs:
EventArgs.Empty = New EventArgs()
muchas gracias una vez mas. :-)
un saludo
Ivan
"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje de noticias
news:%23gsE6pD...@TK2MSFTNGP03.phx.gbl...
> "Elisa" escribió:
>
>> Lo he probado pero como tengo que borrar un registro de una tabla, se me
>> queda colgado y además si le pulso el botón que he puesto para salir me
>> ejecuta la acción dos veces.
>
> Hola, Elisa:
>
> Para que el evento «FormClosing» no se ejecute dos veces, tendrás que
> crear un campo en el formulario para saber si se ha pulsado o no el botón
> de Salir:
> ...
si me lo permites, pienso que eso no tiene lógica, desde el punto de
vista que plantea Elisa. Según dicho planteamiento, debería existir una
subrutina que debería ejecutarse cuando, por el motivo que sea, se esté
cerrando el formulario.
Y entonces el paso lógico es que el botón *para salir* solamente
provoque el cierre del formulario, y en el evento '_FormClosing'
(independientemente del evento que lo produjo) ejecute la subrutina de
cierre antes de que el cierre se haga efectivo por completo.
Que modificando tu propuesta, sería como sigue:
>
> Private Sub btnExit_Click( ... )
> ' Se ha pulsado el botón de salir
> ' Cerramos el formulario
> '
> Me.Close()
> End Sub
>
> Y en el evento «FormClosing» ejecutarías lo siguiente:
>
> Private Sub Form1_FormClosing( ... )
>
' ...aquí llamamos al procedimiento que contiene
' las instrucciones de cierre
>
> End Sub
Por otro lado:
> btnExit_Click(Nothing, Nothing)
digamos que carece de sentido ejecutar internamente un código adscrito a
un evento de la interfaz del usuario. Debería ser al revés, la petición del
usuario a través del botón, ejecutaría una subrutina 'externa' al evento, no
puede (mejor dicho, no debería) ser inherente al botón.
Espero que se me disculpe esta pequeña analogía, pero sería como si un
conductor se obligase a entrar por la puerta del copiloto para ponerse al
volante. Y no digo que no se pueda hacer, es posible entrar al vehículo por
el portaequipajes, si uno así lo desea, pero no parece coherente.
--
Saludos
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/microsoft.public.es.dotnet.vb
( i ) Temperancia en el foro:
http://support.microsoft.com/default.aspx?scid=fh;ES-ES;newsreglas
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -