Principales respuestas
Anular eventos al cerrar formularios

Pregunta
-
Saludos a Todos.
Tengo un formulario con varios textbox, cuando cierro la aplicación grabo el contenido de cada textbox en mi Base de datos, y cierro el formulario.
El problema es que despues de cerrar el formulario se me ejecuta el evento lostfocus det texbox en el que estaba, dando error al intentar leer mi BD cuando ya la habia cerrado con anterioridad.
¿Como puedo evitar que se produzca este evento?
lunes, 24 de octubre de 2011 9:45
Respuestas
-
Buenas DavinciNieto.
No sé muy bien la funcionalidad que tienes implementada en el evento LostFocus y ahora mismo no caigo si se ejecuta el evento FormClosing antes, pero si es así, puedes definir una variable global digamos:
Dim vSalidaControlada As Boolean = False
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing vSalidaControlada = True End Sub
En el evento LostFocus añadir lo siguiente para cancelar el evento:
If vSalidaControlada Then e.Cancel = True End If
Un saludo.
Antonio López Atienza
Microsoft Community Contributor
.NET Developer
Code examples
http://www.lopezatienza.es- Marcado como respuesta Eduardo PorteschellerModerator miércoles, 26 de octubre de 2011 12:50
lunes, 24 de octubre de 2011 10:12 -
"DavinciNieto" escribió:
> En el evento lostFocus solo hago validacion y lectura de BD, no la grabacion.
> El problema esta en que cuando grabo y cierro el formulario, si el foco esta
> en un textbox ejecuta primero el evento "click" del boton grabar (que tambien
> cierra) y despues el lostfocus del textbox.Hola:
Yo te aconsejaría que en lugar de utilizar el evento LostFocus utilizases el evento Leave, por los motivos que se indica en la ayuda del método LostFocus
Para que no se ejecute el código existente en el evento LostFocus o Leave cuando hayas hecho clic en el control Button que cierra el formulario, tienes que detectar el control actualmente activo. Para ello, al comienzo del evento LostFocus o Leave tendrías que ejecutar lo siguiente:
Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave ' Obtenemos el control actualmente activo. ' Dim ctrl As Control = Me.ActiveControl If (ctrl.Name = "Button1") Then ' Si el control activo es el control Button1, ' el que cierra el formulario, abandonamos ' el procedimiento. ' Return End If ' Ejecutar aquí el código propio del evento Leave. ' ' .... End Sub
Creo que los comentarios lo dicen todo. :-)Un saludo
NOTA: si esta respuesta te ha resultado útil, recuerda marcarla como satisfactoria.
Enrique Martínez
[MS MVP - VB]Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.
- Propuesto como respuesta Enrique M. MontejoModerator lunes, 24 de octubre de 2011 15:56
- Marcado como respuesta Eduardo PorteschellerModerator miércoles, 26 de octubre de 2011 12:49
lunes, 24 de octubre de 2011 15:55Moderador
Todas las respuestas
-
Buenas DavinciNieto.
No sé muy bien la funcionalidad que tienes implementada en el evento LostFocus y ahora mismo no caigo si se ejecuta el evento FormClosing antes, pero si es así, puedes definir una variable global digamos:
Dim vSalidaControlada As Boolean = False
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing vSalidaControlada = True End Sub
En el evento LostFocus añadir lo siguiente para cancelar el evento:
If vSalidaControlada Then e.Cancel = True End If
Un saludo.
Antonio López Atienza
Microsoft Community Contributor
.NET Developer
Code examples
http://www.lopezatienza.es- Marcado como respuesta Eduardo PorteschellerModerator miércoles, 26 de octubre de 2011 12:50
lunes, 24 de octubre de 2011 10:12 -
En el evento Lost_Focus del textbox no me recoge e.cancel. Por lo que usare la variable vSalidaControlada para realizar o no las instrucciones del evento.
Gracias.
lunes, 24 de octubre de 2011 11:06 -
Correcto DavinciNieto.
Un saludo.
Antonio López Atienza
Microsoft Community Contributor
.NET Developer
Code examples
http://www.lopezatienza.eslunes, 24 de octubre de 2011 11:30 -
dando error al intentar leer mi BD cuando ya la habia cerrado con anterioridad.
pero en que evento estas grabando los registros ? en el lostfocus
porque no es un buen evento para realziar acceso a la base de datos, deberias grabar en el FormClosing directamente, peor no deberias ahcer nada en el LostFocus, salvo quizas alguna validacion
slaudos
Leandro Tuttini
Blog
Buenos Aires
Argentinalunes, 24 de octubre de 2011 12:19 -
En el evento lostFocus solo hago validacion y lectura de BD, no la grabacion. El problema esta en que cuando grabo y cierro el formulario, si el foco esta en un textbox ejecuta primero el evento "click" del boton grabar (que tambien cierra) y despues el lostfocus del textbox.lunes, 24 de octubre de 2011 14:02
-
claro el tema es que si estas validando deberias usar el evento Validating, no el LostFocus
pense que hacias otras cosas en el lostfocus, no solo validar, algo como ser
Private Sub txtDireccion_Validating(..) If String.IsNullOrEmpty(txtDireccion.Text.Trim()) Then ErroProvider1.SetError(txtDireccion, "El campo DIRECCION es obligatorio.") e.Cancel = True Else ErroProvider1.SetError(txtDireccion, "") End If End Sub
con el validating no tendrias ese problema porque no podrias sacar el foco si es invalido lo ingresado en el textbox, y se eejcuta en otro orden primero la validacion y luego el evento click del boton
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentinalunes, 24 de octubre de 2011 14:20 -
"DavinciNieto" escribió:
> En el evento lostFocus solo hago validacion y lectura de BD, no la grabacion.
> El problema esta en que cuando grabo y cierro el formulario, si el foco esta
> en un textbox ejecuta primero el evento "click" del boton grabar (que tambien
> cierra) y despues el lostfocus del textbox.Hola:
Yo te aconsejaría que en lugar de utilizar el evento LostFocus utilizases el evento Leave, por los motivos que se indica en la ayuda del método LostFocus
Para que no se ejecute el código existente en el evento LostFocus o Leave cuando hayas hecho clic en el control Button que cierra el formulario, tienes que detectar el control actualmente activo. Para ello, al comienzo del evento LostFocus o Leave tendrías que ejecutar lo siguiente:
Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave ' Obtenemos el control actualmente activo. ' Dim ctrl As Control = Me.ActiveControl If (ctrl.Name = "Button1") Then ' Si el control activo es el control Button1, ' el que cierra el formulario, abandonamos ' el procedimiento. ' Return End If ' Ejecutar aquí el código propio del evento Leave. ' ' .... End Sub
Creo que los comentarios lo dicen todo. :-)Un saludo
NOTA: si esta respuesta te ha resultado útil, recuerda marcarla como satisfactoria.
Enrique Martínez
[MS MVP - VB]Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.
- Propuesto como respuesta Enrique M. MontejoModerator lunes, 24 de octubre de 2011 15:56
- Marcado como respuesta Eduardo PorteschellerModerator miércoles, 26 de octubre de 2011 12:49
lunes, 24 de octubre de 2011 15:55Moderador