У меня есть приложение для системного трея на vb.net. Это приложение имеет меню с несколькими параметрами. Существует возможность выбора языкового приложения. Этот вариант языка имеет три подменю: английский, французский и испанский.Избегайте toolstripmenu закрыты по выбранному элементу
Ниже snipet код из трех подменю:
submnuEnglish = New ToolStripMenuItem(rm.GetString("ContextMenusToolStripMenuItemLangEnglish"))
submnuEnglish.Image = My.Resources.en
submnuEnglish.CheckOnClick = True
submnuSpanish = New ToolStripMenuItem(rm.GetString("ContextMenusToolStripMenuItemLangSpanish"))
submnuSpanish.Image = My.Resources.es
submnuSpanish.CheckOnClick = True
submnuFrench = New ToolStripMenuItem(rm.GetString("ContextMenusToolStripMenuItemLangFrench"))
submnuFrench .Image = My.Resources.fr
submnuFrench .CheckOnClick = True
В исполняющей каждый раз, когда я выбрать язык из меню опций языка, приложение главное меню закрывается автоматически после выбора, поэтому мне нужно сделать щелкните правой кнопкой мыши на приложении системного трея, чтобы снова получить доступ к главному меню приложения. Я хотел бы иметь возможность выбирать язык без подменю языка/меню главного приложения, которое закрывается при каждом выборе.
Как я могу это сделать?
РЕШЕНИЕ - ОБНОВЛЕНО: Ниже mngLanguage соответствует объекту ToolStripMenuItem, который содержит опцию submnuEnglish, submnuSpanish и submnuFrench типа ToolStripMenuItem.
MainMenu - главное меню приложения типа ContextMenuStrip.
Private Sub ToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs)
' uncheck the old ones
Dim selectedLanguage As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
For Each language As ToolStripMenuItem In mnuLanguage.DropDownItems
If Not Object.Equals(selectedLanguage, language) Then
language.CheckState = CheckState.Unchecked
End If
Next
' check the new one
selectedLanguage.CheckState = CheckState.Checked
' Prevents language menu from being hiding
' Thanks to Crush Sundae ;) that guide me in the right direction with his comment
Me.mnuLanguage.DropDown.Show()
End Sub
Private Sub MainMenu_Closing(ByVal sender As Object, _
ByVal e As System.Windows.Forms.ToolStripDropDownClosingEventArgs) _
Handles MainMenu.Closing
' Avoid main menu for closing on language selection
If submnuEnglish.Pressed Or _
submnuSpanish.Pressed Or _
submnuFrench.Pressed Then
e.Cancel = True
End If
End Sub
Ниже приведено событие, необходимое для обновления пользовательского интерфейса на выбранном элементе. Если он не реализован, то, когда элемент отмечен (язык), предыдущий не отключен после перемещения мыши.
Private Sub mnuLanguage_DropDownItemClicked(_
ByVal sender As Object, _
ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) _
Handles mnuLanguage.DropDownItemClicked
' Refresh language selection on dropdown menu
If e.ClickedItem.Equals(submnuEnglish) Then
' English language selected
submnuSpanish.Checked = False
submnuFrench.Checked = False
ElseIf e.ClickedItem.Equals(submnuSpanish) Then
' Spanish language selected
submnuEnglish.Checked = False
submnuFrench.Checked = False
Else
' French language selected
submnuEnglish.Checked = False
submnuSpanish.Checked = False
End If
End Sub
С вышеуказанным имплантантом он работает как шарм!
Перед внедрением выше решение, которое я пытался решить с помощью:
mnuLanguage.DropDown.AutoClose = True or False depending on the case
, но сделать это было причиной UI ведет себя ненормально, странное поведение, например, меню с подменю не является раскрывающийся автоматически при наведении мыши. С моей точки зрения, это не рекомендуется использовать.
Я обновил свое сообщение. Я решил это, реализовав еще одно событие, одно из которых - это то, что вы сказали. Благодаря! – user1624552
Я рад, что это помогло. :) –