VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 将Keyboard Focus移到下一个控制项
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:13630, 日期:2001-09-28
 将Keyboard Focus移到下一个控制项


作者: cww 

  其实,这使用SendKeys "{TAB}"便可以成功,而Move到上一个控制项则使用
SendKeys "+{TAB}"便可以了,但是SendKeys也可以将键盘的讯息送到其他的Process
所以我一直害怕如果在SendKeys之前其他的程式取得Foucs那不知会如何。
所以才想要使用API来做,而原本这也很简单,只要使用PostMessage 传入WM_NEXTDLGCTL
便可以了,不过VB似乎不理这个讯息,可能在某个地方该讯息被吃掉了,所以转而使用
以下的方式来做:或许,有人也认为这就不会有问题了吗?说真的我不知道,不过至少
它不是用SendKeys来做(万一有个文书处理的Program得Focus那会在文章中加入一个Tab
,那可能不太好)。
注:不要被"Dlg" 的字眼迷糊掉,这几个API在Form中都可以Work的

Private Declare Function GetNextDlgTabItem Lib "user32" (ByVal hDlg As Long, _
        ByVal hCtl As Long, ByVal bPrevious As Long) As Long
Private Declare Function SetDlgFocus Lib "user32" Alias "SetFocus" _
       (ByVal hwnd As Long) As Long

注释:移到下一个可Focus的Control
Private Sub NextDlg()
Dim hwnd5 As Long
hwnd5 = GetNextDlgTabItem(Me.hwnd, Screen.ActiveControl.hwnd, 1)
Call SetDlgFocus(hwnd5)
End Sub

注释:移到上一个可Focus的Control
Private Sub PrevDlg()
Dim hwnd5 As Long
hwnd5 = GetNextDlgTabItem(Me.hwnd, Screen.ActiveControl.hwnd, 0)
Call SetDlgFocus(hwnd5)
End Sub