Если у кого-то есть другие решения для достижения этого, мне было бы очень интересно услышать их.Температурный прогресс в VB.NET
Я пытаюсь создать программу проверки пароля для школьного проекта, но у меня возникают проблемы с моей панелью прогресса. В основном, когда сила пароля сильна (поэтому значение балла выше), progressbar работает отлично, но когда сила пароля невелика, индикатор прогресса не изменяется до нужного цвета или показывает значение.
Вот мой код:
Public Class PassCheck
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer,
ByVal wMsg As Integer, ByVal wParam As Integer,
ByVal IParam As Integer) As Integer
Dim Checked As Boolean
Dim Password As String
Dim PasswordLength As Integer
Dim PasswordStrength As String
Dim Score As Integer
Dim ProgBarVal As Double
Dim LengthScore As Integer
Dim NumberScore As Integer
Dim CapsScore As Integer
Dim LowerScore As Integer
Dim SymbolScore As Integer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
hidepasswordOption.Checked = True
textboxPassword.PasswordChar = "*"
End Sub
Private Sub hidepasswordOption_Click(sender As Object, e As EventArgs) Handles hidepasswordOption.Click
hidepasswordOption.Checked = Not hidepasswordOption.Checked
If textboxPassword.PasswordChar = "*" Then
textboxPassword.PasswordChar = ""
Else
textboxPassword.PasswordChar = "*"
End If
End Sub
Private Sub buttonCheck_Click(sender As Object, e As EventArgs) Handles buttonCheck.Click
Score = 0
NumberScore = 0
SymbolScore = 0
LowerScore = 0
CapsScore = 0
Password = textboxPassword.Text
If String.IsNullOrEmpty(Password) Then
MsgBox("You must enter a password!", 16, "Error!")
Exit Sub
End If
Checked = True
Check_Password()
progressbarStrength.Value = 0
progressbarStrength.Maximum = 20
progressbarStrength.Minimum = 0
labelScoreText.Text = Score & "/20"
progressbarStrength.Value = Score
Progbar_calc()
labelStrengthText.Text = PasswordStrength
End Sub
Public Sub Progbar_calc()
If Score <= 10 Then
PasswordStrength = "Weak"
SendMessage(progressbarStrength.Handle, 1040, 2, 0)
ElseIf Score <= 15 Then
PasswordStrength = "Medium"
SendMessage(progressbarStrength.Handle, 1040, 3, 0)
ElseIf Score <= 20 Then
PasswordStrength = "Strong"
SendMessage(progressbarStrength.Handle, 1040, 1, 0)
End If
End Sub
Public Sub Check_Password()
Password = textboxPassword.Text
PasswordLength = Len(Password)
ImprovePass.Password = textboxPassword.Text
Dim array() As Char = Password.ToCharArray()
For i = 0 To array.Length - 1
If Char.IsUpper(array(i)) Then
If CapsScore >= 3 Then
Else
CapsScore = CapsScore + 1
End If
ElseIf Char.IsLower(array(i)) Then
If LowerScore >= 3 Then
Else
LowerScore = LowerScore + 1
End If
ElseIf Char.IsNumber(array(i)) Then
If NumberScore >= 3 Then
Else
NumberScore += 1
End If
ElseIf Char.IsSymbol(array(i)) Then
If SymbolScore >= 3 Then
Else
SymbolScore += 1
End If
End If
Next
Score += CapsScore
Score += LowerScore
Score += NumberScore
Score += SymbolScore
If PasswordLength >= 8 Then
Score += 8
Else
Score += PasswordLength
End If
If CapsScore = 0 Then
ImprovePass.listboxImprove.Items.Add("You should include some capital letters.")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf CapsScore = 1 Then
ImprovePass.listboxImprove.Items.Add("You have included 1 capital letter,")
ImprovePass.listboxImprove.Items.Add("You should include some more capital letters.")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf CapsScore >= 2 Then
ImprovePass.listboxImprove.Items.Add("You have included 2 or more capital letters!")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
End If
If LowerScore = 0 Then
ImprovePass.listboxImprove.Items.Add("You should include some lower case letters.")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf LowerScore = 1
ImprovePass.listboxImprove.Items.Add("You have included 1 lower case letter,")
ImprovePass.listboxImprove.Items.Add("You should include some more lowercase letters.")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf LowerScore >= 2 Then
ImprovePass.listboxImprove.Items.Add("You have included 2 or more lower case letters!")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
End If
If NumberScore = 0 Then
ImprovePass.listboxImprove.Items.Add("You should include some numbers.")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf NumberScore = 1 Then
ImprovePass.listboxImprove.Items.Add("You have included 1 number,")
ImprovePass.listboxImprove.Items.Add("You should include some more numbers.")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf NumberScore >= 2 Then
ImprovePass.listboxImprove.Items.Add("You have included 2 or more numbers!")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
End If
If SymbolScore = 0 Then
ImprovePass.listboxImprove.Items.Add("You should include some symbols.")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf SymbolScore = 1 Then
ImprovePass.listboxImprove.Items.Add("You have included 1 symbol,")
ImprovePass.listboxImprove.Items.Add("You should include some more symbols.")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf SymbolScore >= 2 Then
ImprovePass.listboxImprove.Items.Add("You have included 2 or more symbols!")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
End If
If PasswordLength <= 6 Then
ImprovePass.listboxImprove.Items.Add("You have only included" & Space(1) & PasswordLength & Space(1) & "characters,")
ImprovePass.listboxImprove.Items.Add("You should include at least 3 more to make your password more secure!")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf PasswordLength <= 8 Then
ImprovePass.listboxImprove.Items.Add("You have only included" & Space(1) & PasswordLength & Space(1) & "characters,")
ImprovePass.listboxImprove.Items.Add("You should include at least 4 more to make your password more secure!")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
ElseIf PasswordLength >= 11 Then
ImprovePass.listboxImprove.Items.Add("You have included 11 or more characters!")
ImprovePass.listboxImprove.Items.Add("-------------------------------------")
End If
'MsgBox("Upper: " & CapsScore & "Lower: " & LowerScore & "Number: " & NumberScore & "Symbol: " & SymbolScore)
End Sub
Private Sub improvePassMenu_Click(sender As Object, e As EventArgs) Handles improvePassMenu.Click
ImprovePass.Show()
If textboxPassword.PasswordChar = "*" Then
ImprovePass.labelPassText.Text = "(Hidden)"
Else
ImprovePass.labelPassText.Text = Password
End If
End Sub
Private Sub textboxPassword_TextChanged(sender As Object, e As EventArgs) Handles textboxPassword.TextChanged
Score = 0
NumberScore = 0
SymbolScore = 0
LowerScore = 0
CapsScore = 0
Password = textboxPassword.Text
PasswordLength = Len(Password)
Select Case PasswordLength
Case < 6
buttonCheck.Enabled = False
labelScoreText.Text = "Too Short"
labelStrengthText.Text = "Too Short"
Case > 12
buttonCheck.Enabled = False
labelScoreText.Text = "Too Long"
labelStrengthText.Text = "Too Long"
Case Else
buttonCheck.Enabled = True
labelScoreText.Text = ""
labelStrengthText.Text = ""
End Select
End Sub
End Class
Прогресс бар работает, когда сила сильна:
Прогресс бар работает на среде только тогда, когда он является первым (или, возможно, второй) проверка поскольку программа была открыта:
Когда это не первый (или, возможно, второй) проверить это не работает:
Прогресс бар работает на слабый только тогда, когда он является первым (или, возможно, второй) проверить, так как программа была открыта:
Когда это не первый (или, возможно, второй) проверить это не работает:
Мне нужно это, чтобы работать КАЖДОЕ ВРЕМЯ независимо от того, сколько паролей вы вводите.
Любые идеи, почему это может не работать? Спасибо,
Что это такое? 'SendMessage (progressbarStrength.Handle, 1040, 2, 0)' Я не знаю, что такое сообщение 1040. –
@EricJ. Это код для изменения цвета панели результатов. Я не совсем уверен, что означает 1040, поскольку я получил эту строку кода от друга, который делает тот же проект, для которого он работает. Есть ли лучший способ, с помощью которого я мог бы изменить цвет прогрессивной панели? –
Подпись PInvoke не совсем правильная. см. http://stackoverflow.com/a/33438255/1070452 – Plutonix