Получить встроенный объект управления версиями
У меня есть контекстное меню, которое используется для нескольких элементов управления в форме. Это довольно простое "логическое" меню выбора (т. е. условия "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.
Эти и другие подобные решения не решали проблему. Я недостаточно хорошо знаком с объектами управления версиями, чтобы работать через это без какой-либо помощи. Надеюсь, это будет для меня поучительным опытом.