我刚学VB,是在主窗体MDIFORM下的load事件下先调用密码框; frmlogin.show vbmodal 然后密码框里的代码是:Option ExplicitPublic LoginSucceeded As BooleanPrivate Sub cmdCancel_Click() '设置全局变量为 false '不提示失败的登录 LoginSucceeded = False Me.Hide End SubPrivate Sub cmdOK_Click() '检查正确的密码 If txtPassword = "password" Then '将代码放在这里传递 '成功到 calling 函数 '设置全局变量时最容易的 LoginSucceeded = True Me.Hide Else MsgBox "无效的密码,请重试!", , "登录" txtPassword.SetFocus SendKeys "{Home}+{End}" End If End Sub但是一点取消按钮,密码框是关闭了,但并不能退出程序,而是把主窗体打开了.
Private Sub cmdCancel_Click() '设置全局变量为 false '不提示失败的登录 LoginSucceeded = False End End Sub
先调用frmlogin窗体,然后在frmlogin窗体事件内调用主窗体
怎么样先调用frmlogin窗体啊?
可以这样改: 增加一个模块: 在模块中写: Sub main() frmlogin.show end sub 然后密码框里的代码改成:Option ExplicitPublic LoginSucceeded As BooleanPrivate Sub cmdCancel_Click() '设置全局变量为 false '不提示失败的登录 LoginSucceeded = False End End SubPrivate Sub cmdOK_Click() '检查正确的密码 If txtPassword = "password" Then '将代码放在这里传递 '成功到 calling 函数 '设置全局变量时最容易的 LoginSucceeded = True Me.Hide MDIFORM.show Else MsgBox "无效的密码,请重试!", , "登录" txtPassword.SetFocus SendKeys "{Home}+{End}" End If End Sub
一般的做法是楼上那种,先验证身份,然后才显示窗体,当然记得在工程--属性--启动对象中选取submain 你上面出现的问题是:你在mdiform 的load事件中 frmlogin.show vbmodal 你点取消后会继续运行下面的代码。所以程序还会跑完余下的代码 如果你非要这么做的话,可以这样 pirvate sub mdiform_load() frmlogin.show 1 if frmlogin.LoginSucceeded =false then end end if end sub
frmlogin.show vbmodal
然后密码框里的代码是:Option ExplicitPublic LoginSucceeded As BooleanPrivate Sub cmdCancel_Click()
'设置全局变量为 false
'不提示失败的登录
LoginSucceeded = False
Me.Hide
End SubPrivate Sub cmdOK_Click()
'检查正确的密码
If txtPassword = "password" Then
'将代码放在这里传递
'成功到 calling 函数
'设置全局变量时最容易的
LoginSucceeded = True
Me.Hide
Else
MsgBox "无效的密码,请重试!", , "登录"
txtPassword.SetFocus
SendKeys "{Home}+{End}"
End If
End Sub但是一点取消按钮,密码框是关闭了,但并不能退出程序,而是把主窗体打开了.
'设置全局变量为 false
'不提示失败的登录
LoginSucceeded = False
End
End Sub
增加一个模块:
在模块中写:
Sub main()
frmlogin.show
end sub
然后密码框里的代码改成:Option ExplicitPublic LoginSucceeded As BooleanPrivate Sub cmdCancel_Click()
'设置全局变量为 false
'不提示失败的登录
LoginSucceeded = False
End
End SubPrivate Sub cmdOK_Click()
'检查正确的密码
If txtPassword = "password" Then
'将代码放在这里传递
'成功到 calling 函数
'设置全局变量时最容易的
LoginSucceeded = True
Me.Hide
MDIFORM.show
Else
MsgBox "无效的密码,请重试!", , "登录"
txtPassword.SetFocus
SendKeys "{Home}+{End}"
End If
End Sub
你上面出现的问题是:你在mdiform 的load事件中
frmlogin.show vbmodal
你点取消后会继续运行下面的代码。所以程序还会跑完余下的代码
如果你非要这么做的话,可以这样
pirvate sub mdiform_load()
frmlogin.show 1
if frmlogin.LoginSucceeded =false then
end
end if
end sub
在form_load中判断登录的返回值。不符合就End