Как открыть collectioneditor из смарт-тега
У меня проблема с открытием CollectionEditor из verb. Он отлично работает при редактировании из окна свойств, но когда я открываю CollectionEditor из глаголов, он дает мне некомпонентный элемент после добавления нового элемента.
это элемент компонента.
СС1.ПНГ
это то, что я получаю после добавления элемента из глаголов.
СС2.ПНГ
Если вы видите, что после добавления элемента разделы данных и дизайна отсутствуют или новый элемент не является компонентом.
Что я уже пробовал:
ниже приведен мой код. Я что-то упустил? заранее спасибо.
Imports System.Drawing.Design Imports System.ComponentModel Imports System.ComponentModel.Design Imports System.Windows.Forms.Design Friend Class NavCollectionControlDesigner Inherits ControlDesigner Private MyControl As mSideBarPanelNav Public Overrides Sub Initialize(Component As IComponent) MyBase.Initialize(Component) ' Record instance of control we're designing MyControl = DirectCast(Component, mSideBarPanelNav) End Sub Protected Overrides Sub Dispose(disposing As Boolean) MyBase.Dispose(disposing) End Sub Public Overrides ReadOnly Property AssociatedComponents() As System.Collections.ICollection Get Return MyControl.Items End Get End Property Public Overrides ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection Get Dim v As New DesignerVerbCollection() ' Verb to add Items v.Add(New DesignerVerb("&Edit Items", New EventHandler(AddressOf OnAddButton))) Return v End Get End Property Private Sub OnAddButton(sender As Object, e As System.EventArgs) Dim pd As PropertyDescriptor = TypeDescriptor.GetProperties(MyControl)("Items") Dim editor As UITypeEditor = DirectCast(pd.GetEditor(GetType(UITypeEditor)), UITypeEditor) Dim serviceProvider As New RuntimeServiceProvider() editor.EditValue(serviceProvider, serviceProvider, MyControl.Items) End Sub End Class Public Class RuntimeServiceProvider Implements IServiceProvider Implements ITypeDescriptorContext Private Function IServiceProvider_GetService(serviceType As Type) As Object Implements IServiceProvider.GetService If serviceType = GetType(IWindowsFormsEditorService) Then Return New WindowsFormsEditorService() End If Return Nothing End Function Private Class WindowsFormsEditorService Implements IWindowsFormsEditorService Public Sub DropDownControl(control As Control) Implements IWindowsFormsEditorService.DropDownControl MsgBox(control.Name) End Sub Public Sub CloseDropDown() Implements IWindowsFormsEditorService.CloseDropDown End Sub Public Function ShowDialog(dialog As Form) As System.Windows.Forms.DialogResult Implements IWindowsFormsEditorService.ShowDialog dialog.Font = New Font("Segoe UI", 9, FontStyle.Regular) Return dialog.ShowDialog() End Function End Class Public Sub OnComponentChanged() Implements ITypeDescriptorContext.OnComponentChanged End Sub Public Function OnComponentChanging() As Boolean Implements ITypeDescriptorContext.OnComponentChanging Return ((Not CType(Me, ITypeDescriptorContext).PropertyDescriptor Is Nothing) AndAlso Not CType(Me, ITypeDescriptorContext).PropertyDescriptor.IsReadOnly) 'Return True ' true to keep changes, otherwise false End Function Public ReadOnly Property Container() As IContainer Implements ITypeDescriptorContext.Container Get Return Nothing End Get End Property Public ReadOnly Property Instance() As Object Implements ITypeDescriptorContext.Instance Get Return Nothing End Get End Property Public ReadOnly Property PropertyDescriptor() As PropertyDescriptor Implements ITypeDescriptorContext.PropertyDescriptor Get Return Nothing End Get End Property End Class Public Class Item Inherits Component 'codes not related to the issue End Class <Designer(GetType(NavCollectionControlDesigner))> Public Class mSideBarPanelNav Inherits Control Private _Items As New ItemsCollection() <Category("Item Collections")> <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> <Editor(GetType(ItemCollectionEditor), GetType(System.Drawing.Design.UITypeEditor))> Public ReadOnly Property Items() As ItemsCollection Get Return _Items End Get End Property 'codes not related to the issue End Class
Ralf Meier
Потому что этот код выглядит совершенно иначе, чем я его понимаю :
Вы хотите отредактировать некоторые свойства вашего элемента управления с помощью SmartTag-Designer, имея маленькую треугольную кнопку в правом верхнем углу вашего элемента управления ? Здесь вы хотите отредактировать коллекцию-свойство (тоже)?
Ralf Meier
Дополнительный :
Покажите также объявление вашей коллекции предметов ..
Ralf Meier
Было бы неплохо, если бы Вы дали обратную связь одному (или обоим) решениям ...