Что такое StickyLabel и почему он находится в коллекции ContextMenuStrip.Contols? - PullRequest
0 голосов
/ 09 июня 2019

У меня есть 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 вместо того, чтобы просто пропустить его?

1 Ответ

1 голос
/ 09 июня 2019

For Each MyControl As ToolStripItem In ContextMenuStrip_PopulatedItems.Controls

следует изменить на

For Each MyControl As ToolStripItem In ContextMenuStrip_PopulatedItems.Items.

Однако мне все еще интересно понять, что происходит за кулисами с этой StickyLabel.

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