Как настроить сочетания клавиш для Windows Forms TabControl? - PullRequest
5 голосов
/ 15 декабря 2010

Существует ли простой способ установки сочетания клавиш для вкладки в элементе управления вкладками в Visual Studio 2010? Могу ли я установить какое-либо свойство?

Я посмотрел онлайн, но все статьи, которые я видел, были очень запутанными.

Ответы [ 2 ]

5 голосов
/ 18 декабря 2010

К сожалению, такого свойства нет, но реализация этой функции также не должна быть сложной.Существует два способа, которые стоит рассмотреть, в зависимости от дизайна вашего приложения.

  1. Если форма, в которой размещен TabControl, уже использует систему меню, настроить ее почти тривиально.Во-первых, вам необходимо добавить команду меню, которая переключается на каждый TabPage в вашем TabControl.Затем вы можете просто добавить сочетание клавиш к этому пункту меню (которое равно простому свойству MenuItem / ToolStripMenuItem), чтобы при каждом нажатии этой клавиши эта команда меню выполнялась,который переключается на соответствующую TabPage.

  2. Однако система меню может не подходить для каждой формы.Если это так, вам придется сделать немного больше работы.По сути, вам нужно установить для свойства KeyPreview формы, в которой размещен ваш TabControl, значение True и определить сочетания клавиш, которые вы хотите использовать для переключения вкладок.

    Настройка KeyPreview формысвойство позволяет этой форме получать ключевые события до того, как эти события будут переданы в элемент управления, имеющий фокус.Это важно для того, чтобы этот метод работал, потому что в противном случае ваш код в обработчике событий KeyDown формы никогда не обнаружит нажатия клавиш, которые вы хотите перехватить.Только после того, как форма завершит обработку каждого нажатия клавиши, они будут переданы в элемент управления, который обычно получает их.

    Итак, после того, как вы установили это свойство, вам нужно добавить код в обработчик для формы KeyDown событие , которое отслеживает любые сочетания клавиш, которые вы хотите использовать, а затем переключает вкладки соответствующим образом, если обнаруживает, что нажата одна из этих клавиш.В противном случае вам не нужно ничего делать.

    Например, если в вашей форме три TabPages, вы можете решить, что F2 переключится на первую вкладку, F3 переключится на второе, а F4 переключится на третье (хотя, очевидно, вы можете использовать любые клавиши, которые захотите).Затем вы добавили бы следующий код в обработчик событий KeyDown вашей формы, который обнаруживает нажатие этих клавиш и действует соответственно:

     Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        Select Case e.KeyCode
           Case Keys.F2
              'Switch to the first tab page
              MyTabControl.SelectedIndex = 0
           Case Keys.F3
              'Switch to the second tab page
              MyTabControl.SelectedIndex = 1
           Case Keys.F4
              'Switch to the third tab page
              MyTabControl.SelectedIndex = 2
        End Select
     End Sub
    
0 голосов
/ 18 декабря 2010

Вы можете переопределить метод ProcessCmdKey () элемента управления для реализации пользовательских сочетаний клавиш. Большим преимуществом такого способа является то, что нажатие клавиши будет работать только тогда, когда фокус находится на элементе управления вкладкой или одном из элементов управления на вкладках. Project + Add Class, вставьте код, показанный ниже, и скомпилируйте. Перетащите новый элемент управления из верхней части панели инструментов на форму.

Public Class MyTabControl
    Inherits TabControl

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        If keyData >= Keys.F1 And keyData <= Keys.F10 Then
            Me.SelectedIndex = keyData - Keys.F1
            Return True
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

End Class

Если вы хотите, чтобы функциональные клавиши работали независимо от того, какой элемент управления в форме имеет фокус, вам следует переопределить метод ProcessCmdKey формы.

...