Principales respuestas
Como Validar una ventana abierta y no cerrar hasta haber guardado datos

Pregunta
-
Como puedo lograr que si en caso haya llenado los campos (controles Textbox, etc) luego imprimo y me olvido pensando que los guarde, que la ventana no se cierre si tiene campos llenos. Ya que al guardar automaticamente estos se limpian, pero y sino?
Como se valida, tengo una idea pero estoy en duda.
Respuestas
-
Estoy probando el codigo buen funciona si pero hay un problema, si yo elijo el boton cancelar este me limpia los textobx y los desactiva, entonces al dar click en X no deja me sale el mensaje
Hola Javier Rocco,
Claro, porque la variable nunca cambió de valor sigue siendo 'False' y no te permitirá salir mientras este no sea True. Esta variable tiene la función de decirle a la aplicación si la salida es correcta o no, solo cámbiale el valor a True cuando se presione cancelar. (Y claro está que el nombre de la variable ya no sería 'datosGuardados')
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI- Marcado como respuesta Javier Roque viernes, 3 de marzo de 2017 3:45
Todas las respuestas
-
Hola Javier Rocco,
[-] ... que la ventana no se cierre si tiene campos llenos
¿Tu formulario solo contiene controles de tipo TextBox ?
Tienes que validar si por lo menos un TextBox tiene datos antes de cerrar el formulario, para ello debes hacer uso del evento FormClosing el cual se ejecuta antes de que el formulario se cierre, por lo que si encuentras un TextBox con datos cancelas la acción cerrar e informas al usuario.
Lo que sería algo como :
Private Sub FormHijo_FormClosing(sender As .... 'Antes de cerrrar el formulario validamos'que no haya un Textbox con datos
'Si existe un TextBox con su propiedad Text que es diferente a vacío (es porque tiene dato) Dim hasData = Controls.OfType(Of TextBox).Any(Function(x) x.Text.Trim() <> String.Empty) 'Si existe retorna True y entra al if If hasData Then MessageBox.Show("Los datos no se guardaron, inténtelo de nuevo.") e.Cancel = True 'Cancelamos el cierre del form End If End Sub
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI -
-
Hola Javier Rocco,
¿Los comboBox también quedan vacíos, o están enlazados mediante el DataSource y muestran el item 1 por defecto al ser limpiado ?
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI -
Los combos si estan enlazados cuando pido estos sean jalados desde otro form. Los otros textbox los lleno manualmente.
Cuando guardo llamo Limpiar() y sale datos guardados y esos se limpian.
Pero si no guardo y cierro la ventana se pierde todo
El problema es que aveces imprimo y pienso que esta guardado entonces porque?
Ese momento de que cuando jalo un registro obvio porque esta guardado esa rutina tambien confunde ver si guarde luego de imprimir entonces es por eso que necesito validarlo y no perder y volver a digitar
EL form tiene ComboBoxs y Textboxs
Saludos
- Editado Javier Roque viernes, 3 de marzo de 2017 0:19
-
Hola Javier Rocco,
Ahora que lo pienso, podrías crearte una variable 'flag' de tipo 'Boolean' que sea pública que indique si los datos han sido guardados o no, y en el evento FormClosing verificas si es True o no.
Private datosGuardados As Boolean = False Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click 'Algún código de guardar 'Cambiamos el valor de la variable porque ya fue guardado datosGuardados = True End Sub
Y al momento de cerrar el formulario :
Private Sub FormHijo_FormClosing(sender ... 'Si la variable es False es porque no se guardo los datos If Not datosGuardados Then MessageBox.Show("Los datos no se guardaron, inténtelo de nuevo.") e.Cancel = True End If End Sub
Así evitas tener que recorrer los controles y verificas si están vacíos o no.
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI -
-
Estoy probando el codigo buen funciona si pero hay un problema, si yo elijo el boton cancelar este me limpia los textobx y los desactiva, entonces al dar click en X no deja me sale el mensaje
Hola Javier Rocco,
Claro, porque la variable nunca cambió de valor sigue siendo 'False' y no te permitirá salir mientras este no sea True. Esta variable tiene la función de decirle a la aplicación si la salida es correcta o no, solo cámbiale el valor a True cuando se presione cancelar. (Y claro está que el nombre de la variable ya no sería 'datosGuardados')
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI- Marcado como respuesta Javier Roque viernes, 3 de marzo de 2017 3:45