none
Problema con barra de progreso, bloquear aplicación RRS feed

  • Pregunta

  • Hola a todos

    Estoy realizando una aplicación en VB net y sql server. La aplicación consta de un menú principal y según en que opción pulses se abre otro form con SHOW (no modal). Algunos de estos formularios realizan operaciones que pueden llevar varios minutos (facturación) y quiero ponerle una barra de progreso para que no parezca que se ha colgado. El código que tengo es algo parecido a este ejemplo (suponiendo que fueran 100 facturas):

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            ProgressBar1.Visible = True
            For x = 0 To 100 'Nº de Facturas
    
                ProgressBar1.Value = x
                Application.DoEvents()
    
                Facturar()
            Next
    
            ProgressBar1.Visible = False
            MsgBox("Facturación finalizada")
        End Sub

    Esto me funciona bien, pero tengo un problema: mientras se ejecuta la facturación me permite ir al menú principal y realizar otras operaciones, y quiero evitar eso. ¿existe alguna opción para bloquear toda la aplicación y que no permita al usuario hacer nada? Quiero que mientras está la barra de progreso en pantalla el usuario no pueda pulsar en ningún sitio.

    Una opción sería abrir el formulario de facturación como modal (así ya no tengo acceso a nada del menú principal) pero esto lo descarté porque hay formularios que también van a llevar barra de progreso y necesariamente se abren como no modal. Además, abriendo como modal me impide pulsar en el formulario de atrás pero me permite pulsar en el propio formulario de facturación, y también quiero evitar eso.

    Saludos y gracias de antemano!

    miércoles, 13 de junio de 2012 8:55

Todas las respuestas

  • Hola:

    Yo probaría (lo probé en VB6 pero no lo he necesitado en VB.NET) poner .Enabled = False al formulario principal y al propio, ejemplo:

    ' En el FORMULARIO PRINCIPAL

    Sub FormPrincipal_AbrirFormularioNoModal()

       Me.Enabled = False  ' Desactivar formulario principal

       frmNoModal.Show   ' Atención, en frmNoModal tendrás que 'activar' FormPrincipal.Enabled = True

    End Sub

    ' En el FORMULARIO NO MODAL

    Sub frmNoModal_Load()

       FormPrincipal.Enabled = False  ' Desactivar formulario principal, otra vez por si acaso ;-)

    End Sub

    Sub ProgresoBar()

       Me.Enabled = False   ' Desactivamos el propio formulario del Progress Bar

       ... hacemos lo que tengamos que hacer

       Me.Enabled = True

    End Sub

    Sub frmNoModal_Unload()

       FormPrincipal.Enabled = True

    End Sub

    Espero que te sirva.

    Saludos

    • Propuesto como respuesta Focus Media martes, 25 de septiembre de 2012 9:05
    miércoles, 13 de junio de 2012 9:09
  • Hola:

    Si el formulario principal (El menu), es un Mdicontainer entonces se me ocurre poner en otro form sin bordes unicamente la barra de progreso y cuando pulses el Boton Facturar que este Form se muestre de manera Modal (FormProgress.ShowDialog()) y que comience a mostrar el progreso. con esto evitas que interactuen con tus demas formularios.

    Saludos.


    Luis Escobar :D

    miércoles, 13 de junio de 2012 15:21