Как использовать ToolStripMenuItems без событий мыши (событие щелчка или двойного щелчка)? - PullRequest
1 голос
/ 04 апреля 2010

У меня есть решение в Vb.NET 2008 Windows Form с ToolStripMenuItems,

но мне нужно реализовать навигацию по меню без какого-либо вмешательства мыши.

Я нашел только события мыши в ToolStripMenuItems, MenuStrip и т. Д.

Все MenuStrip и ToolStripMenuItems создаются программно, считывая разрешения пользователя из базы данных, затем добавляют обработчик для управления событиями, но клиент не хочет взаимодействия с мышью, он хочет только ввод с клавиатуры!

Добавить подпрограмму меню:

    Private Sub AddModulo(ByVal strNAME As String, ByVal strTITULO As String)

    Dim oToolStripMenuItem As New ToolStripMenuItem(strTITULO)

    oToolStripMenuItem.Name = strNAME
    oToolStripMenuItem.Text = "&" & strTITULO


    mnuPrincipal.Items.Add(oToolStripMenuItem)
    AddHandler oToolStripMenuItem.MouseMove, AddressOf LoadMenu


End Sub

Добавление подпрограммы:

    Private Sub AddItems(ByVal StrModulo As String, ByVal strItem As String)

    Dim mnuItem As New ToolStripMenuItem

    mnuItem.Name = StrModulo.ToUpper
    mnuItem.Size = New System.Drawing.Size(145, 22)

    If Microsoft.VisualBasic.Left(strItem, 1) = "-" Then

        mnuItem.Text = "                " & Microsoft.VisualBasic.Mid(strItem.ToUpper, 2)
        mnuItem.BackColor = Color.Blue
        mnuItem.ForeColor = Color.White

    Else
        mnuItem.Text = strItem
    End If

    mnuItem.Tag = UCase(Mid(StrModulo, 5, 2))

    AddHandler mnuItem.Click, AddressOf LoadMenuItem

    Dim newOption = mnuPrincipal.Items(mnuPrincipal.Items.Count - 1)
    newOption.DropDownItems.Add(mnuItem)

End Sub

Thx.

Ответы [ 2 ]

3 голосов
/ 04 апреля 2010

Это очень простой материал, поэтому, если это не то, что вам нужно, просто проигнорируйте этот ответ, но мне кажется, что это то, о чем вы спрашиваете.

В любом случае, ToolStripMenuItems легко доступны с клавиатуры ...

Если вы вставляете MenuStrip в форму из панели инструментов и затем используете опцию «Вставить стандартные элементы» в задачах MenuStrip, чтобы вставить стандартные элементы меню, при запуске приложения winforms, если вы нажмете клавишу Alt, вы заметите что письмо от каждого верхнего уровня ToolStripMenuItem подчеркнуто. Это предупреждает вас, что подпункты этого ToolStripMenuItem доступны, если вы нажимаете эту клавишу в сочетании с клавишей Alt. Например, если вы нажмете Alt + F, откроется меню «Файл».

После того, как меню верхнего уровня будет удалено таким образом, вы можете нажать еще одну клавишу клавиатуры для доступа к подэлементам. Это достигается путем добавления символа & char перед любой буквой в свойстве TextStripMenuItem «Text» в конструкторе. Это позволяет получить доступ к подэлементу после использования комбинации Alt + Key для раскрытия меню верхнего уровня. Например, по умолчанию OpenToolStripMenuItem, который является подэлементом меню «Файл», имеет букву & char перед буквой O (& Open), поэтому ваши пользователи могут легко получить доступ к этому событию, нажимая Alt + F + O вместо использования мыши.

В дополнение к этому вы можете легко назначить сочетание клавиш для каждого ToolStripMenuItem, используя свойство ShortcutKeys в ToolStripMenuItem. Если вы уроните выбранное свойство ToolStripMenuItem «ShortcutKeys» в конструкторе, вы сможете выбрать модификатор (Ctrl, Shift, Alt) и клавишу клавиатуры, которую вы хотите использовать в сочетании с этим модификатором (обычно Ctrl + O для файла> Открыть). Используя тот же подход, вы можете назначить сочетание клавиш для любого ToolStripMenuItem, который вы добавляете в полоску меню самостоятельно ...

Надеюсь, это поможет ...

1 голос
/ 07 апреля 2010

Используйте сочетания клавиш в соответствии с предложением, но также установите для TabStop значение True в контейнере базового меню. Это позволит клавиатуре получить доступ к меню с помощью клавиш со стрелками и вкладок.

Вы должны быть в состоянии использовать комбинацию mousedown и события click, чтобы проверить «ключ ввода». Добавьте логическое значение, которое можно установить в значение true в событии mousedown (срабатывает до щелчка), которое определяет, использовалась ли мышь для нажатия кнопки. Затем в событии Click проверьте логическое значение и выйдите из sub после очистки логического значения. Если mousedown boolean не установлен, вы нажали клавишу ввода, чтобы вызвать событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...