У меня есть ContextMenuStrip
, который плотно прилегает к ListView
и сделан из комбинации различных ToolStripMenuItem
и ToolStripSeparator
.Я хотел бы, чтобы это контекстное меню скрывало / показывало некоторые из этих элементов управления, в зависимости от текущего состояния ListView
(в представлении нет элемента, выбран только 1 элемент, выбран более 1 элемент).ListView
является частью UserControl, который загружается в Ms Word через VSTO AddIn уровня приложения.
На данный момент моя стратегия заключалась в том, чтобы полагаться на свойство .tag
элементов управления и запускать его.Переключите это свойство для каждого элемента управления в контекстном меню.Это выглядит так:
Private Sub ContextMenuStrip_PopulatedItems_Opening(sender As Object, e As CancelEventArgs) Handles ContextMenuStrip_PopulatedItems.Opening
Dim ThisListView As ListView = ContextMenuStrip_PopulatedItems.SourceControl
For Each MyControl As ToolStripItem In ContextMenuStrip_PopulatedItems.Controls
MyControl.Visible = False
Select Case CType(MyControl.Tag, String)
Case "ShowAlways"
MyControl.Visible = True
Case "WhenSelection"
If ThisListView.FocusedItem IsNot Nothing AndAlso ThisListView.SelectedItems.Count > 0 Then
MyControl.Visible = True
End If
Case "WhenSingleSelection"
If ThisListView.FocusedItem IsNot Nothing AndAlso ThisListView.SelectedItems.Count = 1 Then
MyControl.Visible = True
End If
Case "WhenMultipleSelection"
If ThisListView.FocusedItem IsNot Nothing AndAlso ThisListView.SelectedItems.Count > 1 Then
MyControl.Visible = True
End If
Case Else
Throw New ApplicationException("The control tag property is not recognized.")
End Select
Next
End Sub
Когда я щелкаю правой кнопкой мыши на ListView
, я получаю следующее сообщение об ошибке:
System.InvalidCastException: 'Невозможно привести объект квведите 'StickyLabel' для ввода 'System.Windows.Forms.ToolStripItem'. '
в строке: For Each MyControl As ToolStripItem In ContextMenuStrip_FilesToPopulate.Control
.
Я не нашел ни документации, ни ответов в Googleпри поиске "StickyLabel".И я не понимаю, почему он пытается привести его в цикл ForeEach вместо того, чтобы просто пропустить его?