• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

set#1

Progress bar (VB.Net 2005)

8 mensagens neste tópico

Hello.

Tenho um progress bar no form de Login com timer, que ao terminar a contagem quero que feche o formulario consecutivamente o sistema.

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
        ProgressBar1.Value = ProgressBar1.Value + 1
        If (ProgressBar1.Value > 100) Then
            MsgBox("O sistema fechou por ficar muito tempo sem acede-lo. Volte a abrir novamente", MsgBoxStyle.OkOnly, "System Exit")
            Me.Close()
        End If
    End Sub

Mas quando termina a contagem tenho erro:

Value of '101' is not valid for 'Value'. 'Value' should be between 'minimum' and 'maximum'.

Parameter name: Value

Tenho o max = 100 e min = 0

Any idea??

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
        ProgressBar1.Value = ProgressBar1.Value + 1
        If (ProgressBar1.Value > 100) Then
            MsgBox("O sistema fechou por ficar muito tempo sem acede-lo. Volte a abrir novamente", MsgBoxStyle.OkOnly, "System Exit")
            Me.DialogResult = Windows.Forms.DialogResult.Abort
        End If
    End Sub

Sugiro o seguinte:

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
        If (ProgressBar1.Value => 100) Then
            MsgBox("O sistema fechou por ficar muito tempo sem acede-lo. Volte a abrir novamente", MsgBoxStyle.OkOnly, "System Exit")
            Me.DialogResult = Windows.Forms.DialogResult.Abort
        Else
            ProgressBar1.Value = ProgressBar1.Value + 1
        End If
    End Sub

Deves verificar antes de incrementares o valor.

Da tua maneira, estavas a atribuír um valor impossível (101 quando o máximo é 100) e só depois é que ias verificar se estava fora.

Para além disso, > não pode funcionar, por a mesma razão. 101 é impossível quando o máximo é 100.

BTW, não precisas da condição entre parentesis no VB :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sugiro o seguinte:

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
        If (ProgressBar1.Value => 100) Then
            MsgBox("O sistema fechou por ficar muito tempo sem acede-lo. Volte a abrir novamente", MsgBoxStyle.OkOnly, "System Exit")
            Me.DialogResult = Windows.Forms.DialogResult.Abort
        Else
            ProgressBar1.Value = ProgressBar1.Value + 1
        End If
    End Sub

Deves verificar antes de incrementares o valor.

Da tua maneira, estavas a atribuír um valor impossível (101 quando o máximo é 100) e só depois é que ias verificar se estava fora.

Para além disso, > não pode funcionar, por a mesma razão. 101 é impossível quando o máximo é 100.

BTW, não precisas da condição entre parentesis no VB :)

Com o

Me.DialogResult = Windows.Forms.DialogResult.Abort

o prompt do System Exit não para de aparecer. Pus

Me.Close()

também não para, mas clicando OK sai do sistema.

Agora o problema ta no prompt...o ideal seria aparecer uma vez e esperar pelo click OK.

E obrigado pela dica dos parentesis!!  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta parar o timer

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
        If (ProgressBar1.Value => 100) Then
            MsgBox("O sistema fechou por ficar muito tempo sem acede-lo. Volte a abrir novamente", MsgBoxStyle.OkOnly, "System Exit")
            Me.DialogResult = Windows.Forms.DialogResult.Abort
            Timer.Enabled = False
            Me.Close
        Else
            ProgressBar1.Value = ProgressBar1.Value + 1
        End If
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta parar o timer

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
        If (ProgressBar1.Value => 100) Then
            MsgBox("O sistema fechou por ficar muito tempo sem acede-lo. Volte a abrir novamente", MsgBoxStyle.OkOnly, "System Exit")
            Me.DialogResult = Windows.Forms.DialogResult.Abort
            Timer.Enabled = False
            Me.Close
        Else
            ProgressBar1.Value = ProgressBar1.Value + 1
        End If
    End Sub

Ainda continua o loop da msgbox!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exprimenta parar o Timer antes da messagebox, as in, logo a primeira instrução do IF

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exprimenta parar o Timer antes da messagebox, as in, logo a primeira instrução do IF

Ficou assim e esta a funcionar:

    Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
        If ProgressBar1.Value >= 100 Then
            Timer.Stop()
            MsgBox("O sistema fechou por ficar muito tempo sem acede-lo. Volte a abrir novamente", MsgBoxStyle.OkOnly, "System Exit")
            Me.DialogResult = Windows.Forms.DialogResult.Abort
            Me.Close()
        Else
            ProgressBar1.Value = ProgressBar1.Value + 1
        End If
    End Sub

Parei o timer depois da condição If e antes da msgbox.

Obrigado pela atencao, voces sao gr8  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora