Kevin Brady Ответов: 0

Получить встроенный объект управления версиями


У меня есть контекстное меню, которое используется для нескольких элементов управления в форме. Это довольно простое "логическое" меню выбора (т. е. условия "True" или "False"). Ниже выберите событие для одного из них (ложные):

Private Sub Bool_False_Click(sender As System.Object, e As System.EventArgs) Handles pmnuFilterBool_False.Click
    Dim iItem As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
    Dim cms As ContextMenuStrip = CType(iItem.Owner, ContextMenuStrip)

    If cms.SourceControl IsNot Nothing Then
        Dim jName As String = cms.SourceControl.Name

        If jName <> "" Then
            Select Case jName
                Case Is = "ccbName"
                    ContainerCL.AddFieldVal("Name", ccbName.Text, False)
                Case Is = "cbUnit"
                    ContainerCL.AddFieldVal("Unit", cbUnit.Text, False)

            End Select

        Else
            Dim jTypeName As String = TypeName(cms.SourceControl)
            If jTypeName = "ToolStripComboBoxControl" Then
                Dim jItem As Control = (DirectCast(pmnuFilterBool.SourceControl, Control))

                'here is where I don't know what to do. How do I get the underlying (embedded) ToolStripComboBox?

            End If

        End If

    End If

End Sub


Он отлично работает для контекстного меню, прикрепленного к стандартным элементам управления, таким как textbox или combobox. Проблема заключается в использовании элементов, где элемент управления "встроен" (т. е. вложен)

На форме у меня есть пользовательский toolstripcombobox, который также использует contextmenu. Он был разработан с некоторой помощью на CodeProject. Видеть Отключить контекстное меню по умолчанию[^]

Пользовательские управления toolstripcombobox назначает контекстное меню полосы в базовый компонент ComboBox.

Option Strict Off
Option Explicit On

<System.ComponentModel.Description("Custom Control to add a context menu to a toolstrip combobox")> _
Public Class MyToolStripComboBox
    Inherits Forms.ToolStripComboBox
    ' allows a context menu to be added to a toolstrip combobox control
    Public Property ContextMenuStrip() As ContextMenuStrip
        Get
            Return Me.ComboBox.ContextMenuStrip
        End Get
        Set(ByVal iConMenu As ContextMenuStrip)
            Me.ComboBox.ContextMenuStrip = iConMenu
        End Set
    End Property
End Class


Итак, в событии click на родительской форме, как мы "детализируем", чтобы получить базовый ToolStripComboBox. На самом деле мне нужно его имя и значение (текст), чтобы я мог предпринять соответствующие действия.

Что я уже пробовал:

Эта проблема, по-видимому, известна в сообществе программирования .net. Видеть здесь .net - SourceControl ContextMenuStrip - это ничто в ToolStripMenuItem Click? - переполнение стека[^] например. Я думаю, что есть также аналогичная публикация на CodeProject.

Эти и другие подобные решения не решали проблему. Я недостаточно хорошо знаком с объектами управления версиями, чтобы работать через это без какой-либо помощи. Надеюсь, это будет для меня поучительным опытом.

0 Ответов