Private Sub C1_Click()
 a = Val(T1.Text)
 b = Val(T2.Text)
 If a > b Then
  L1.Caption = a & "+" & b & "=" & a + b
 Else
  L1.Caption = a & "-" & b & "=" & a - b
 End If
End SubPrivate Sub T1_LostFocus()
 If Not IsNumeric(T1.Text) Then
   a = MsgBox("是否重新输入", vbYesNo + vbQuestion, "看看")
    If a = 6 Then
      T1.Text = ""
      T1.SetFocus
    Else
      End
    End If
 End If
End Sub
Private Sub T2_LostFocus()
 If Not IsNumeric(T2.Text) Then
   a = MsgBox("是否重新输入", vbYesNo + vbQuestion, "看看")
    If a = 6 Then
      T2.Text = ""
      T2.SetFocus
    Else
      End
    End If
 End If
End Sub为什么T1.setfocus用不到?

解决方案 »

  1.   

    你的代码里少了一句话。
    在t1.setfocus,和t2.setfocus之后,添加一句:exit sub ,你要的功能就实现了。
    大道理讲不清楚,简单地说。我认为,你在失去焦点事件里,设定得到焦点然后继续执行失去焦点事件里的语句,本身就是一种类似死循环,或者说逻辑就是乱的
      

  2.   

    还是不能的……还是不停地输出MSGBOX……但如果那个焦点去到C1那里就没那个问题,这是什么回事?
      

  3.   

    不要用LostFocus事件,VB为校验专门提供了Validate事件。
      

  4.   

    因为你的两个文本框初始状态都是非数字,离开那一个都会弹出对话框。加入你从 T1 跳到 T2,触发了 T1 的对话框。如果你选择 Yes,则 T1.SetFocus 就会触发 T2 的对话框。如此往复循环。使用 Validate 事件,可以取消焦点移动:Private Sub T1_Validate(Cancel As Boolean)
     If Not IsNumeric(T1.Text) Then
      a = MsgBox("ÊÇ·ñÖØÐÂÊäÈë a", vbYesNo + vbQuestion, "¿´¿´")
      If a = 6 Then
      T1.Text = ""
      Cancel = True
      Else
      End
      End If
     End If
    End Sub
    Private Sub T2_Validate(Cancel As Boolean)
     If Not IsNumeric(T2.Text) Then
      a = MsgBox("ÊÇ·ñÖØÐÂÊäÈë b", vbYesNo + vbQuestion, "¿´¿´")
      If a = 6 Then
      T2.Text = ""
      Cancel = True
      Else
      End
      End If
     End If
    End Sub