2016-01-18 2 views
0

У меня есть 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?

+0

Оба эти события работали в моем тестировании. Возможно, вы динамически создаете TabControl и не создаете обработчики событий? Попробуйте с новым проектом и медленно добавьте/удалите детали, пока не найдете свою проблему. Без дополнительного кода я не вижу проблемы. – Steve

+0

@Steve: Я не знаю, почему ответ, отправленный вчера кем-то (и комментариями, которые я сделал), был удален, но парень сказал, что TabPages не может иметь фокус, он был ограничен TabControl. Следуя его совету, я переместил обработчики событий «PreviewKeyDown» и «KeyDown» в TabControl, и он сработал. Я теряю навигацию стрелок между TabPages, но со мной все в порядке. – Chrome58

+0

Полезно знать. Добавьте это как ответ и примите его, чтобы закрыть эту проблему, пожалуйста. – Steve

ответ

0

Я не знаю, почему ответ, отправленный вчера кем-то (и комментариями, которые я сделал), был удален, но было сказано, что TabPages не может иметь фокус и что он ограничен TabControl. Следуя этому совету, я переместил обработчики событий PreviewKeyDown и KeyDown на события TabControl, и он сработал.

Я теряю часть навигации по стрелке между вкладками, но мне это подходит.