0

I am trying to get my progress bar all the way to 100% but it updates to around 85-95% and then opens my next form. Could someone guide me as to what I'm doing incorrectly? I have tried to edit the step and also the sleep count but I can just manage to get it to near the end of the progress bar. Is there some code interfering with the progress bar?

Public Class LoginForm
'
'This specifies the default value for the login attempt
Dim Attempt = 0
Public Function checkinput() As Boolean
    '
    'This is the default username
    Dim Uname = "Niral Mehta"
    '
    'This is the default password
    Dim pword = "Ban4na"
    '
    'This assigns the value of the Username to the UserText.text variable
    Dim Username = UserText.Text
    '
    'This assigns the value of the Password to the PassText.text variable
    Dim Password = PassText.Text
    '
    'Here the Username and password are being assigned the values defined above, if the user input correctly matches the defined values then it returns as true
    If Username = Uname And Password = pword Then
        Return True
    Else
        '
        'If the user fails to put in the correct values on the third attempt then the program automatically shuts down after warning them
        If Attempt = 3 Then
            MsgBox("You have failed to login correctly three times, this program will shut down as a security measure", MsgBoxStyle.OkOnly)
            Me.Close()
            Return False
        End If
        Attempt = Attempt + 1
        MsgBox("Incorrect username and/or password", MsgBoxStyle.OkOnly)
        Return False
    End If
End Function

Private Sub KillProcess_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KillProcess.Click
    '
    'When the end program button is clicked, a message box will pop up and give the options to end the program
    If MsgBox("Are you sure you want to quit?", MsgBoxStyle.YesNo) = DialogResult.Yes Then
        Me.Close()
    End If
End Sub

Private Sub PassText_TextChanged(sender As Object, e As EventArgs) Handles PassText.TextChanged
    '
    'This hides the password characters 
    PassText.PasswordChar = "#"

    'This sets the character length for a password 
    '
    PassText.MaxLength = 8
End Sub

Private Sub UserText_TextChanged(sender As Object, e As EventArgs) Handles UserText.TextChanged
    '
    'This sets the character length for a username
    UserText.MaxLength = 14
End Sub

Private Sub StartNextForm_Click(sender As Object, e As EventArgs) Handles StartNextForm.Click
    If checkinput() Then
        With LoginProgress
            .Visible = True
            .Step = 2
            .Maximum = 101
            .Style = ProgressBarStyle.Blocks
            .Value = 0
        End With
        Do
            System.Threading.Thread.Sleep(100)
            LoginProgress.PerformStep()
        Loop Until LoginProgress.Value >= LoginProgress.Maximum
        FrmMain.Show()
        Me.Hide()
    End If
End Sub
Kazimierz Jawor
  • 18,861
  • 7
  • 35
  • 55
nmehta_001
  • 3
  • 3
  • 7
  • possible duplicate of [ProgressBar resets at 60%](http://stackoverflow.com/questions/11494976/progressbar-resets-at-60) – GSerg Nov 22 '13 at 20:00

2 Answers2

0

Using a timer you can use this code:

Timer code:

Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer.Tick
    If prgStatus.Value = prgStatus.Maximum Then
        Timer.Enabled = False
        prgStatus.Value = 0
        Exit Sub
    End If
    prgStatus.Value = prgStatus.Value + 1
    If (prgStatus.Value = 1) Then
        'Do something
    End If
End Sub

NOTE: All code for the 'Do something - must be under the

prgStatus.Value = prgStatus.Value + 1

Starting the timer, just place this code in a button, form load etc

Timer.Enabled = True

You can as many

        If (prgStatus.Value = 1) Then
        'Do something
    End If

As you want.

To delay it just change the max the progressbar can be or change the timer tick.

Hope that helps :)

BaeFell
  • 640
  • 1
  • 8
  • 28
-1

Your events aren't being processed since you are running a loop on (hogging) your UI thread and not giving the UI thread message pump any time to process the events

Try adding Application.DoEvents()

Do    
    System.Threading.Thread.Sleep(100)
    LoginProgress.PerformStep()
    Application.DoEvents() ' <-- this
Loop Until LoginProgress.Value >= LoginProgress.Maximum
djv
  • 15,168
  • 7
  • 48
  • 72
  • Assuming the downvote was for the `DoEvents`, keep in mind I didn't design the software, nor would I block the UI thread with a loop like this. In this case, DoEvents should solve the problem of the UI not updating, but I'm not attempting to teach any lessons in properly threading applications. – djv Nov 22 '13 at 21:07