У меня есть TabControl с несколькими вкладками, каждая из которых содержит серию PictureBox. Я хочу иметь возможность перемещаться с помощью клавиш со стрелками внутри этих вкладок. Я попытался дать .Focus()
вкладке, когда пользователь ее выберет, а затем поймать события PreviewKeyDown
и KeyDown
, но это не сработает. Я поставил точку останова в обработчике событий PreviewKeyDown
, и это не событие достигнуто.Не удается получить событие KeyDown на вкладке
Вот активация TabPage:
Sub TilesetsTab_Selected(ByVal sender As Object, ByVal e As TabControlEventArgs) Handles TilesetsTab.Selected
Dim myTab As TabControl = CType(sender, TabControl)
If myTab.TabCount = 0 Then Exit Sub
Active.Tileset = Project.Tileset(CInt(myTab.SelectedTab.Tag))
Active.Tileset.Tab.Focus()
End Sub
А вот ключ обработчики событий
Sub Tab_KeyPreviewDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs) Handles Tab.PreviewKeyDown
If e.KeyCode = Keys.Left Or e.KeyCode = Keys.Right Or e.KeyCode = Keys.Up Or e.KeyCode = Keys.Down Then e.IsInputKey = True
End Sub
Sub Tab_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles Tab.KeyDown 'BUG
Dim TilesWidth As Integer = Me.Tab.Width \ Me.ScreenSize
Select Case e.KeyCode
Case Keys.Left
If Active.Tile.Index = 0 Then Exit Sub
Me.Tile(Active.Tile.Index - 1).Selected()
Case Keys.Right
If Active.Tile.Index = Project.Tileset.Count - 1 Then Exit Sub
Me.Tile(Active.Tile.Index + 1).Selected()
Case Keys.Up
If Active.Tile.Index < TilesWidth Then Exit Sub
Me.Tile(Active.Tile.Index - TilesWidth).Selected()
Case Keys.Down
If Active.Tile.Index + TilesWidth > Active.Tileset.Count - 1 Then Exit Sub
Me.Tile(Active.Tile.Index + TilesWidth).Selected()
End Select
End Sub
Почему я не могу стрелять событие KeyDown на TabPage?
Оба эти события работали в моем тестировании. Возможно, вы динамически создаете TabControl и не создаете обработчики событий? Попробуйте с новым проектом и медленно добавьте/удалите детали, пока не найдете свою проблему. Без дополнительного кода я не вижу проблемы. – Steve
@Steve: Я не знаю, почему ответ, отправленный вчера кем-то (и комментариями, которые я сделал), был удален, но парень сказал, что TabPages не может иметь фокус, он был ограничен TabControl. Следуя его совету, я переместил обработчики событий «PreviewKeyDown» и «KeyDown» в TabControl, и он сработал. Я теряю навигацию стрелок между TabPages, но со мной все в порядке. – Chrome58
Полезно знать. Добавьте это как ответ и примите его, чтобы закрыть эту проблему, пожалуйста. – Steve