none
Como Validar una ventana abierta y no cerrar hasta haber guardado datos RRS feed

  • 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.

    jueves, 2 de marzo de 2017 21:34

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
    viernes, 3 de marzo de 2017 3:18

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

    jueves, 2 de marzo de 2017 22:25
  • tiene varios textbox y 2 combobox. 
    jueves, 2 de marzo de 2017 22:34
  • 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

    jueves, 2 de marzo de 2017 22:39
  • 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

    viernes, 3 de marzo de 2017 0:00
  • 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

    viernes, 3 de marzo de 2017 0:15
  • 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
    viernes, 3 de marzo de 2017 2:58
  • 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
    viernes, 3 de marzo de 2017 3:18