我在MDI应用中,添加了一个"Log in Dialog",在MDIForm_Load事件中show这个登录窗口.可是如果我直接关闭登录窗口或者不点击登录而是直接点击应用窗口,就可以进入应用了,没有起到登录的作用为什么?

解决方案 »

  1.   

    在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
      

  2.   

    将Log in Dialog设为启动窗体,在Log in Dialog的unload事件中Load MDIForm_Load不知道是不是这个概念
      

  3.   

    我已经让启动窗口设置为login dialog了.很好用,谢谢!
    但是:
    我希望在启动窗口后面的背景是我的应用窗口MDIfrm,否则只是小小的登陆窗口先弹出来,多难看啊,有办法吗?
      

  4.   

    将MDIfrm的enable属性设为false就可以了。当然以上方法都没有必要了。