我想让我的第一个If
停在"Incorrect user and password"
,但是到第二个和第三个If
说"incorrect user"
和"incorrect password"
之后{ {1}}。
"incorrect user and password"
答案 0 :(得分:1)
让我解释一下...让我们往回努力...
变量类型很多,每种类型对于特定任务都是必需和/或推荐的。在您的示例中,您有一个numAttempts
用于计数失败尝试,但是,您将其作为Double
>>> Dim numAttempts As Double
,这是错误且浪费的,仅使用标准Integer
表示这种情况下的整数。这也很有趣:Dim wrong As String = False
。根本上有两件事是错误的。字符串为Text
,这意味着它应该始终在文本>>> Dim wrong As String = "False"
周围加上引号。但是,使用某种东西来测试True
或False
应该是Boolean
,因此实际上,正确的用法和语法应该是Dim wrong As Boolean = False
。
旧版VB6代码。将.NET之前的代码与.NET代码混合并匹配从来都不是一件好事。您正在使用Val
,请不要这样做。另外,值得注意的是,您的用法是不需要的,只是不正确。您正在使用:loginpassword = Val(txtpass.Text)
。你为什么做这个?您认为这里发生了什么?它将尝试将txtpass.Text
(字符串)中的内容转换为Double
(不是字符串),然后将其放入loginpassword
(字符串)中。
我希望您不要犯罪,我只是想让您看到一些缺陷,以便您可以像许多人已经尝试过的那样尝试改进并热爱编程。
那么让我们回到您的原始代码和问题。以下是您想要做的事情的简化版本。
尝试一下,理解它,然后根据需要更改它。例如,如果要单独检查用户名/密码。
祝你好运!
Dim numAttempts As Integer = 3
Dim User As String = "ShaoHecc"
Dim Password As String = "daedric123"
Private Sub btnok_Click(sender As Object, e As EventArgs) Handles btnok.Click
'Check if Username or Password are incorrect
If Not txtuser.Text = User Or Not txtpass.Text = Password Then
numAttempts -= 1
If numAttempts = 0 Then
MessageBox.Show("Maxiumum number attempts reached, you have been denied access.")
Application.Exit()
End If
MessageBox.Show("Invalid Username or Password, you have " & numAttempts & " attempts left.")
Exit Sub
End If
'Username and Password are correct
MessageBox.Show("Access Granted!")
numAttempts = 3 'Reset if needed
End Sub