例如我定义了一个textbox的lostfocus事件来判断textbox.text是否为空,但关闭窗口时(例如按Alt+F4、点击cmdCancel、点击窗体右上的关闭按钮)希望不需要处理lostfocus,有什么办法使得lostfocus失效吗?

解决方案 »

  1.   

    设置标志。Private Text1_LostFocus()
      if Fg Then
      ...  End if
    End If这里的Fg在需要判断时为TRUE即可
      

  2.   

    用另外的事件
    Private Sub Text1_Validate(Cancel As Boolean)
     MsgBox "OK"
    End Sub
      

  3.   

    看来我没有说清楚。我的例子是指我做了一个textbox的lostfocus事件来判断textbox.text是否为空,为空就跳一个提示窗。如果现在我的焦点是在textbox,当焦点跳到另一个控件的时候,调用了lostfocus,这是没有问题的,但当我关闭窗口的时候,如果焦点在textbox,而且textbox.text也为空,跳提示窗就是很烦人的事了,所以希望能编程满足关闭窗口时不调用lostfocus或跳过lostfocus中的语句。别的替代的方法我也有,但是我想知道有没有方法直接解决这个问题的。今天看了一个方法,察看activecontrol来避免按Cancel时的lostfocus调用Private Sub Text1_LostFocus() 
        If Screen.ActiveControl Is Me.cmdCancel Then 
           Debug.Print "按到Cancel"
           Exit Sub
        Else 
           Debug.Print "进行LostFoucs的程式" 
        End If 
    End Sub
    还有今天发现点右上的关闭按钮和按ALT+F4其实都没有lostfocus发生 @_@bb再问一个问题
    Private Sub Text1_LostFocus() 
        Msgbox "hello"
    End SubPrivate Sub cmdCancel_Click()
        Unload frmTest
    End Sub这种情况下,焦点在text1,点Cancel,跳出"hello"对话框,但是不执行Unload frmTest。这是为什么呢?
      

  4.   

    这就是LostFocus事件不适合用于数据有效性检查的原因,换用Validate事件可搞定。
    将cmdCancel.CausesValidation=False,可解决。