在show登录窗口的同时要hide主窗口。建议使用模块: 模块: Option ExplicitPublic fMainForm As frmMain Sub Main() Dim fLogin As New frmLogin fLogin.Show vbModal If Not fLogin.OK Then '登录失败,退出应用程序 End End If Unload fLogin Set fMainForm = New frmMain fMainForm.Show End Sub窗体fLogin: Option ExplicitPrivate Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpbuffer As String, nSize As Long) As Long Public OK As Boolean Private Sub Form_Load() Dim sBuffer As String Dim lSize As Long sBuffer = Space$(255) lSize = Len(sBuffer) Call GetUserName(sBuffer, lSize) If lSize > 0 Then txtUserName.Text = Left$(sBuffer, lSize) Else txtUserName.Text = vbNullString End If End SubPrivate Sub cmdCancel_Click() OK = False Me.Hide End Sub Private Sub cmdOK_Click() 'ToDo: 创建测试密码是否正确 '检查正确密码 If txtPassword.Text = "" Then OK = True Me.Hide Else MsgBox "密码错误,再试一次!", , "登录" txtPassword.SetFocus txtPassword.SelStart = 0 txtPassword.SelLength = Len(txtPassword.Text) End If End Sub
将Log in Dialog设为启动窗体,在Log in Dialog的unload事件中Load MDIForm_Load不知道是不是这个概念
模块:
Option ExplicitPublic fMainForm As frmMain
Sub Main()
Dim fLogin As New frmLogin
fLogin.Show vbModal
If Not fLogin.OK Then
'登录失败,退出应用程序
End
End If
Unload fLogin
Set fMainForm = New frmMain
fMainForm.Show
End Sub窗体fLogin:
Option ExplicitPrivate Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpbuffer As String, nSize As Long) As Long
Public OK As Boolean
Private Sub Form_Load()
Dim sBuffer As String
Dim lSize As Long
sBuffer = Space$(255)
lSize = Len(sBuffer)
Call GetUserName(sBuffer, lSize)
If lSize > 0 Then
txtUserName.Text = Left$(sBuffer, lSize)
Else
txtUserName.Text = vbNullString
End If
End SubPrivate Sub cmdCancel_Click()
OK = False
Me.Hide
End Sub
Private Sub cmdOK_Click()
'ToDo: 创建测试密码是否正确
'检查正确密码
If txtPassword.Text = "" Then
OK = True
Me.Hide
Else
MsgBox "密码错误,再试一次!", , "登录"
txtPassword.SetFocus
txtPassword.SelStart = 0
txtPassword.SelLength = Len(txtPassword.Text)
End If
End Sub
但是:
我希望在启动窗口后面的背景是我的应用窗口MDIfrm,否则只是小小的登陆窗口先弹出来,多难看啊,有办法吗?