2012-12-24 69 views
1

我是VB新手,但現在正在開發VB項目。 我遇到了一個關於Shift-Tab的奇怪問題。Shift-tab問題

標籤順序是正確的,它將遍歷所有文本框,複選框等到窗體末尾的接受和取消按鈕,然後循環回到窗體的開頭。

但是,如果您使用Shift-Tab,它將跳過接受和取消按鈕。它適用於所有其他控件。

標籤索引對我來說似乎是正確的。

有沒有人有任何想法可能是什麼原因?我在我的智慧結束,所以任何幫助將不勝感激。

+0

是頁腳按鍵的自定義'UserControl'的一部分的檢查 + 標籤? – wqw

+0

是的,接受和取消按鈕是一個自定義UserControl。基本上,該控件是一個由Accept和Cancel按鈕組成的頁腳。 – user1927182

+1

這是一個設計行爲。在Tab或Shift-Tab上,「UserControl」的第一個組成控件得到了重點關注。您可以檢查正在按下的「Shift」並手動對焦最後一個。 – wqw

回答

1

EnterFocus事件UserControl這樣

Option Explicit 

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal VKey As Long) As Integer 

Public Function IsKeyPressed(ByVal lVirtKey As KeyCodeConstants) As Boolean 
    IsKeyPressed = ((GetAsyncKeyState(lVirtKey) And &H8000) = &H8000) 
End Function 

Private Sub UserControl_EnterFocus() 
    If IsKeyPressed(vbKeyTab) And IsKeyPressed(vbKeyShift) Then 
     cmdCancel.SetFocus 
    End If 
End Sub 
+0

感謝您的幫助。這是非常豐富的信息,對我來說很有意義,但是,代碼仍然拒絕工作。 EnterFocus()僅在我通過控件Tab時觸發,但在Shift + Tab時從未觸發。 – user1927182

+0

您的「頁腳」UserControl嵌套在窗體上的另一個「UserControl」中嗎?也實施它的'EnterFocus'事件。 – wqw