Vb6 为什么';调用SetFocus时是否运行GotFocus?

Vb6 为什么';调用SetFocus时是否运行GotFocus?,vb6,textbox,setfocus,Vb6,Textbox,Setfocus,我在TextBox1.GotFocus事件函数的第一行有一个断点 当我在别处调用TextBox1.SetFocus时,GotFocus断点从未被击中。为什么? 调用函数中的代码:Text1.SetFocus Private Sub Text1_GotFocus() // code here End Sub 一个小节目来说明我的意思 运行程序并单击表单(标题保留为1),单击文本2以使其成为焦点,然后再次单击表单(标题更改为2) 然后在表单中取消对Text2.SetFocus的注释时执行

我在
TextBox1.GotFocus
事件函数的第一行有一个断点

当我在别处调用
TextBox1.SetFocus
时,
GotFocus
断点从未被击中。为什么?

调用函数中的代码:Text1.SetFocus

Private Sub Text1_GotFocus()

   // code here

End Sub

一个小节目来说明我的意思

运行程序并单击表单(标题保留为1),单击文本2以使其成为焦点,然后再次单击表单(标题更改为2)

然后在表单中取消对Text2.SetFocus的注释时执行相同的操作

代码如下:

'1 form with
'    textbox : name=Text1    tabindex=0
'    textbox : name=Text2    tabindex=1
Option Explicit

Private Sub Form_Click()
  'uncomment the following line to make it work
'  Text2.SetFocus
  'with just the following call this wont work
  Text1.SetFocus
End Sub

Private Sub Text1_GotFocus()
  'increase the number in the form caption to show text1 got the focus again
  Caption = CStr(Val(Caption) + 1)
End Sub
当程序启动时,Text1获得焦点(tabindex=0),因此表单标题更改为1 当你点击表单时,没有任何改变,因为Text1已经有了焦点并且没有“获取”它 当您首先单击文本2,然后单击表单时,表单标题会增加

通过使用Text2.SetFocus取消对行的注释,您可以让程序在将焦点移动到Text1之前,始终将焦点移动到Text2(如果它不在那里),因此Text1将始终重新“获取”焦点


不过要小心!因为首先将焦点交给另一个控件可能会产生一些您可能不想要的新事件

也许你的文本框已经有焦点了?(您是否可以发布gotfocus事件的代码以及调用setfocus的位置,也可以尝试在setfocus调用上设置断点以查看它是否实际被调用)请参阅编辑。我已经通过代码查看是否正在进行setfocus调用。它直接进入下一行而不进入焦点。您确定text1没有焦点吗?在将焦点设置为text1之前,请先尝试将焦点设置为其他内容。我想知道GotFocus是否仅在用户发明时调用,而不是通过SetFocus的自动化调用。当您手动单击字段时,事件是否会触发?@Mattdonan:确实会触发,请查看我在下面发布的小程序