2016-02-22 3 views
0

У меня есть приложение для системного трея на 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 ведет себя ненормально, странное поведение, например, меню с подменю не является раскрывающийся автоматически при наведении мыши. С моей точки зрения, это не рекомендуется использовать.

ответ

1

Откройте его после того, как щелкнули по нему.

Поскольку я не вижу больше вашего кода, просто используйте this как ссылку на то, что я говорю.

Private Sub TestToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TestToolStripMenuItem.Click 
    Me.ToolStripDropDownButton1.ShowDropDown() 
EndSub 
+0

Я обновил свое сообщение. Я решил это, реализовав еще одно событие, одно из которых - это то, что вы сказали. Благодаря! – user1624552

+0

Я рад, что это помогло. :) –

Смежные вопросы