先执行的还是Text1_LostFocus事件

解决方案 »

  1.   

    因为你此时的焦点在TEXT1上面,你点CMDEXIT时,首先触发的事TEXT1的LOSTFOCUS事件,而不是END
      

  2.   

    此时的焦点在TEXT1上面,点CMDEXIT时,先触发的事TEXT1的LOSTFOCUS事件,之後 cmdexit 獲得焦點(假如,text1 中沒有 text1.setfocus的情況)
      

  3.   

    在LostFocus事件中处理数据验证不是最好的方法。更好的方法如下:在Text1的Validate事件中进行数据验证;
    将cmdExit的CausesValidation属性设为False;Validate事件在控件失去焦点之前发生,而且仅当即将接收焦点的控件的CausesValidation属性为True时才发生。上面的处理方法将在点击cmdExit时忽略掉数据验证代码,也就不会出现对话框了。
      

  4.   

    '解决方案
    Option ExplicitPrivate Type POINTAPI
        X As Long
        Y As Long
    End TypePrivate Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End TypePrivate Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Sub Command1_Click()
        Unload Me
    End SubPrivate Sub Text1_LostFocus()
        Call CheckInput
    End SubPrivate Sub CheckInput()
    Dim Fhwnd As Long
    Dim pos As POINTAPI
        GetCursorPos pos
        Fhwnd = WindowFromPoint(pos.X, pos.Y)
        Debug.Print "me.hwnd=" & Me.hWnd & "---Command1.hwnd=" & Command1.hWnd & "---text1.hwnd=" & Text1.hWnd & "---posHwnd=" & Fhwnd
        If Fhwnd = Command1.hWnd Then
            Unload Me
            Exit Sub
        End If
        If Trim(Text1.Text) = "" Then
            MsgBox "请输入数据"
            Text1.SetFocus
        End If
    End Sub
      

  5.   

    我不知道你的窗体上都放些什么控件了,只能按照我想的方式来给你个解决的建议。如果text1里的内容检查后是要按下某个按钮去提交到下一个窗体或是进行其他操作,那就在提交或使用它的数据的时候再检测就好了,而不在text1失去焦点的时候检测,这样就可以避免你说的问题了。你说呢?如果不是象我说的这样,那也未必只能在失去焦点的事件中进行判断,想想其他的事件吧
      

  6.   

    我不知道你的窗体上都放些什么控件了,只能按照我想的方式来给你个解决的建议。如果text1里的内容检查后是要按下某个按钮去提交到下一个窗体或是进行其他操作,那就在提交或使用它的数据的时候再检测就好了,而不在text1失去焦点的时候检测,这样就可以避免你说的问题了。你说呢?如果不是象我说的这样,那也未必只能在失去焦点的事件中进行判断,想想其他的事件吧
      

  7.   

    tonykong 的方法可以
     在Text1的Validate事件中进行数据验证;
    将cmdExit的CausesValidation属性设为False;这个可以,我试过了! 
      

  8.   

    楼上的看官想到的问题我也想到了。但是这个Text里的内容没有对应的按纽。也就是说这个Text里的内容被储存在一个变量里,参与程序的运行,而没有Command按纽对它进行判断。
    我想示例代码应该是解决问题的最好方法,所以我想先试一下“为你伤心”这位看官的方法。
      

  9.   

    在你的数据检查函数的最前面加入一个判断用户是否输入了的条件式,如下:if text1.text="" then
     end sub
    endif
      

  10.   

    对了,上面的end sub 应改为exit sub