设置“关闭”和“取消”按钮的causevalidate属性为false即可.

解决方案 »

  1.   

    你可以把关闭\取消按钮的执行程序放到按钮的GetFocus事件中去即可
      

  2.   

    不同意楼上的说法,那样的话,用TAB键将焦点跑到按钮时也要触发该事件了。
      

  3.   

    试试这个吧,我没试过:
    该示例使用三个控件来示范Validate 事件和CausesValidation 属性的使用。在缺省情况下,两个TextBox 控件的CausesValidatio n属性设置为 True,这样当您想把焦点从一个TextBox转换到另一个时,Validate 事件发生。如果 Text1没有包含日期或 Text2没有包含一个大于10的数字,焦点的转换将被阻止。由于 Command1控件的CausesValidation 属性设置为 False,因此您无论何时都可以单击Help 按钮。要试验该示例,在窗体中放置一个CommandButton 和两个TextBox 控件,将代码粘接到窗体的“声明”部分并运行此工程。按Tab 键尝试转换焦点。Private Sub Form_Load()
       '设置按钮的CausesValidation属性为False。当用户
       '单击按钮时,Validate事件不发生。
       '设置按钮的Caption属性为“帮助”。
       With Command1
          .CausesValidation = False
          .Caption = "Help"
       End With   Show
       With Text1 '选择Text1的文本并为它设置焦点。
          .SelLength = Len(Text1.Text)
          .SetFocus
       End With
    End SubPrivate Sub Command1_Click()
       '当单击此按钮时给出用户帮助信息。
       MsgBox _
       "Text1 must be set to a date." & VbCrLF & _
       "Text2 must be a number less than 10."
    End SubPrivate Sub Text1_Validate(KeepFocus As Boolean)
       '如果值不是一个日期,则保持焦点,除非用户
       '单击Help。
       If Not IsDate(Text1.Text) Then 
          KeepFocus = True
          MsgBox "Please insert a date in this field.", ,   "Text1"
       End if
    End Sub
       
    Private Sub Text2_Validate(KeepFocus As Boolean)
       '如果值是一个大于10的数字,保持焦点。
       If Not IsNumeric(Text2.Text) Or Val(Text2.Text) > 10 Then 
          KeepFocus = True
    MsgBox _
    "Please insert a number less than or equal to 10.", , "Text2"
       End If
    End Sub
      

  4.   

    设置enabled属性不就行了,无效时只有“取消”和“关闭”两个按钮可用。
      

  5.   

    实际上这是个简单的再简单不过的问题,不要把事件放到LostFocus事件而放到validate事件中,然后照我的方法即可.代码放到LostFocus回有许多不方便.