当前位置:编程学习 > VB >>

用户登录3次密码不正确退出系统的VB代码

Dim i As Integer
        If Me.txt姓名.Text.Length < 1 Or Me.txt密码.Text.Length < 1 Then
            MsgBox("用户名或密码不能为空!", MsgBoxStyle.Critical, "出错提示")
        ElseIf Me.txt姓名.Text.Length >= 1 Then
            If Me.txt密码.Text <> 123 Then
                If i < 2 Then
                    i = i + 1
                    Me.txt密码 = ""
                    MsgBox("密码错误!", MsgBoxStyle.Critical, "警告")
                ElseIf i = 2 Then
                    MsgBox("你已经3次输错密码,系统将退出!", MsgBoxStyle.Critical, "警告")
                    Exit Sub
                End If
            ElseIf Me.txt密码.Text = 123 Then
                MsgBox("欢迎" & Me.txt姓名.Text, , "欢迎")
            End If
        End If
为什么没有3次错误的退出提示,请各位看看错在哪里,谢啦! --------------------编程问答-------------------- 把你那句:Dim i As Integer
  改成:Static i As Integer
或者把那个变量 i 用 Private 声明成模块(窗体)级的变量。

另外,你的语法不严谨:
你的那3句 ElseIf ………… Then
都应该为 Else

还有一个就是句法问题,你的 MsgBox语句中的括号都应该去除。
--------------------编程问答-------------------- 关键点在于你的计数器变量是局部变量,它的寿命周期是当前过程。

也就是说,每当进入当前过程时,变量 i 才产生,缺省值为 0。当你退出过程时,它就被释放从而消失了。所以,i 的最大值只能是 1。

解决的方法,

1 最简单的就是在窗体的公共段声明此变量,把你的声明语句拉到所有过程的前面去;

2 也可以在某一个标准模块中把它声明成公共变量 Public i As Integer;

3 或者像楼上那样。不过,从程序架构上来说,不推荐这样的方式。
--------------------编程问答-------------------- 楼上的都说过啦.
你的代码一开始就是Dim i As Integer
相当于i每次都是重新投胎,从0开始, 上一辈子的事情当然忘光光咯, 也就不记得什么+1+2的事了.

还有,这代码的逻辑挺乱.现在闲着就帮你写个流程:
1: 定义一个窗体级变量I计数
2: 开始登录(写在按钮的事件里或者其他什么窗体过程中)
如果用户名密码正确,那么: 加载下一个窗体, 卸载登录窗体
否则: I加1, 并且判断I是否等于3, 如果等于3那么退出整个程序(没有否则)

就这么些.
至于判断用户名密码,不要一个一个判断, 层层IF嵌套无端增加逻辑复杂度, 直接用一个if判断用户名和密码是否相符即可, 多个条件用and或or之类的连接. --------------------编程问答-------------------- Dim i As Integer
Private Sub Command1_Click()
If Text1.Text = "123" Then
MsgBox "对"
Else
i = i + 1
MsgBox "错"
If i > 3 Then
MsgBox "你已经输入错误三次即将退出"
End
End If
End If
End Sub

Private Sub Form_Load()
i = 1
End Sub
--------------------编程问答--------------------   直供参考... --------------------编程问答-------------------- Dim i As Integer
        If Me.txt姓名.Text.Length < 1 Or Me.txt密码.Text.Length < 1 Then
            MsgBox("用户名或密码不能为空!", MsgBoxStyle.Critical, "出错提示")
        ElseIf Me.txt姓名.Text.Length >= 1 Then
            If Me.txt密码.Text <> 123 Then
                If i < 2 Then
                    i = i + 1
                    Me.txt密码 = ""
                    MsgBox("密码错误!", MsgBoxStyle.Critical, "警告")
                ElseIf i = 2 Then
                    MsgBox("你已经3次输错密码,系统将退出!", MsgBoxStyle.Critical, "警告")
end'退出程序
                    Exit Sub
                End If
            ElseIf Me.txt密码.Text = 123 Then
                MsgBox("欢迎" & Me.txt姓名.Text, , "欢迎")
            End If
        End If --------------------编程问答-------------------- 直接用 Public n As Integer
后面n = n + 1
If n >= 5 Then
MsgBox "对不起,输入错误次数超过5次,限定您使用本系统,请确认正确用户名和密码后再试!", , "错误提示"
Unload Me --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- Const b As String = "123456"
Static a As Integer
a = a + 1
Label2.Visible = True
If Text1.Text = b Then
Label2.Caption = "点击请进入留言板"
Label2.ForeColor = vbBlue
Else
 If a < 3 Then
   Label2.Caption = "密码错误!"
   Label2.ForeColor = vbRed
   Text1.SelStart = 0
   Text1.SelLength = Len(Text1.Text)
   Text1.SetFocus
   Else
   Label2.Caption = "3次都未通过密码检测,判定为非法用户。请退出"
   Label2.ForeColor = vbRed
   Command2.Visible = True
   Command1.Enabled = False
   Text1.Text = ""
   Text1.Locked = True
   End If
   End If
我自己曾经编写的一小段编码,里面有你要的 --------------------编程问答-------------------- 这个我去年做过一个软件,里面有这个功能,到时发给你看看 --------------------编程问答-------------------- 这个问题的根源可能是你对IF then 语句没理解
if 条件
   如果达成条件,就执行这里的语句,执行完后,直接跳到end [你的问题在这里,你认为执行完这里,会继续执行then后面的语句,这里要理解一下,执行完就跳到end了,不会运行then或thenif后面的所有语句,是直接跳到对应这个if的end了

then 
  否则执行这里的语句,执行完后到end
end

还有是全局变量和局部变量的问题,
如果你这个是是函数的话,i定义了局部变量,那么i每次运行的初始值是0
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,