新建两个formform1,form2在form1上加一个Textbox控件,然后在TextBox的GotFocus的事件中加入如下代码
Private Sub Text1_GotFocus()
    Debug.Print "1"
    Form2.Show
    Command1.SetFocus
End Sub当执行的时候,会打出两个1,如果进行单步调试的话,就会出一个1如果去掉    Command1.SetFocus就会无休止的show form2
想知道是什么问题?

解决方案 »

  1.   

    你想要干吗,当form2.show 后 会激活 form1 的 textbox 再次 gotfocus
    一般没有人这么写,你可以 form2.show 1  ,以模式窗体显示
      

  2.   

    试了一下,以模式窗体显示也是“如果去掉    Command1.SetFocus就会无休止的show form2”
    比较理想的是:用全局的逻辑变量进行控制。
    普通模块里定义 Public CantShow as boolean
    form1
    Private Sub Text1_GotFocus()
        If Not CantShow Then
            Debug.Print "1"
            Form2.Show
        End If
    End Subform2
    Private Sub Form_Unload(Cancel As Integer)
        CantShow = true
    End Sub代码调试过了,很好
      

  3.   

    Private Sub Text1_GotFocus()
        Debug.Print "1"
        Command1.SetFocus   '这两句换个位置
        Form2.Show
    End Sub
      

  4.   

    很久没有来了,多谢楼上几位的回答。
    to  ljhdi() :我现在用的就是你的这种方法。不过这个form2的显示是只显示一次了,但是获得焦点的控件会获得两次

    form1 中
    Private Sub Text1_GotFocus()
        Debug.Print "1"
        Text2.SetFocus   '这两句换个位置
        Form2.Show
    End SubPrivate Sub Text2_GotFocus()
        Debug.Print "2"
    End Sub这个时候text2的gotfocus会触发两次这个到底是怎么造成的呢?有办法解决吗
      

  5.   

    解決的方法是,你在窗體上另放一TextBox,放在不可見的地方.
    把TabIndex設為0..但別設Visible=False.
      

  6.   

    我也说两句,用getfocus事件来为另一控件获取焦点并不是明志之举,建议不要用该事件来激发
    setfocus
      

  7.   

    这个时候text2的gotfocus会触发两次
    這句話是有問題的.
    在Form2顯示之前是一次,當正次選中Form1時才會第二次触发text2的gotfocus
    所以解決方法是:
    Private Sub Text1_GotFocus()
        Debug.Print "1"
        Text2.SetFocus   '这两句换个位置
        othercontrol.SetFocus  '將焦点給其它控件
        Form2.Show
    End Sub
      

  8.   

    你的代码问题就在于,当Form2关闭之后,Form1激活,同时text1得到焦点,这样又激活From2.show事件,很明显,死循环!
    要解决也很简单,就是要让Form1激活的时候text1不得到焦点!
      

  9.   

    感谢楼上几位的回答这个没有办法,不是我想要这么做而是我们的客户需要这么做。不知道以上的几位有没有用代码试过呢?to  mycatlove(冰湖小生) 
    只有把那句设焦点的语句去掉才会死循环。麻烦你们试过了再说.....
      

  10.   

    把textbox的TabStop属性设为False,然后把他的TabIndex属性不要设成0,设为其他的。这样做的话测试通过。