3

Я пытаюсь создать контрольный список для ToolStripMenuItem, который автоматически обрабатывает проверку и снятие отметки элемента, а затем я предоставляю событие программисту, позволяющее им обрабатывать то, что будет дальше. Если что-то подобное уже существует, я бы ЛЮБЛЮ, чтобы знать, где он находится. Я создал редактор коллекций для своего настраиваемого ToolStripMenuItem, и я могу добавить контрольные списки в эту коллекцию контрольных списков. Моя проблема заключается в создании редактора коллекции, как это:Передача объекта редактору коллекции

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), 
Editor(typeof(ToolStripItemExtCollectionEditor), typeof(UITypeEditor))] 

Мне нужно, чтобы иметь возможность пройти этот ToolStripMenuItem «s DropDownitems в этом редакторе коллекции поэтому при добавлении нового контрольного списка и нажмите на свойства элементов контрольного списка вы можете добавить/удалить любую из известных ToolStripMenuItems в/из контрольного списка. Передача ссылки не будет работать, поскольку все это происходит внутри атрибута, и я не знаю, с чего начать, если ответ будет отражением.

+0

С чего начать: установите контрольную точку внутри класса 'ToolStripItemExtCollectionEditor' и проверьте значения, которые вы там получаете. –

+0

То, что я нашел до сих пор, - это выбор компонента, инициирующего вызов конструктора редактора коллекций, и при открытии коллекции вызывается CreateNewItemTypes(). Есть ли способ отладить мой дизайнер? Я мог бы увидеть, кто вызывает конструкторы свойств, если я смог это сделать. – Luminous

+0

Возможно, вы можете запустить второй экземпляр VS и подключить к нему отладчик. Я знаю, что это работает с Expression Blend. – Dirk

ответ

0

Этот ответ относится к VB.NET. Я планирую на превращение этого в C# для DLL, но сейчас это в vb.net, потому что там я начал эту идею с и язык проект находится в

Вот что я до сих пор:.

ToolStripMenuItemExt

Назначение: Пользовательские ToolStripMenuItem.

ToolStripMenuItemExt имеет CheckListSheet, который содержит ссылку на DropDownItems ToolStripMenuItemExt (я прошел в dropdownitems byref, а не byval). Он имеет одно свойство, которое возвращает объект CheckLists в CheckListSheet.

CheckListSheet

Назначение: Поддерживает ссылку на коллекцию я наблюдающий через наблюдаемую тип коллекции и объект коллекции я возвращаюсь в ToolStripMenuItemExt.

CheckListSheet имеет объект CheckLists. Выпадающие элементы, которые я передаю в byref, хранятся в ObservableToolStripItemCollection, которые, надеюсь, когда я доберусь до тестирования, это позволит мне обновить коллекцию контрольных списков легче, так как она наследует ObservableCollection(of ToolStripItemCollection). Этот класс также имеет общую функцию, которая возвращает наблюдаемую коллекцию, которая имеет идентификатор области видимости для общего доступа.

КОНТРОЛЬНЫЕ СПИСКИ

Назначение: CollectionBase тип, который хранит CheckList объекты.

CheckList

Цель: Хранит ToolStripItemCollection, объекты действуют как единый элемент проверяется контрольным (только один пункт проверяются в то время).

Для этого есть некоторые свойства для дизайнера и коллекции для контрольного списка. В конце концов я добавлю логику, чтобы проверить и автоматически снять флажок и поднять событие.

MenuItemCheckListCollectionEditor

Назначение: Позволяет коллекцию известны и экземплярыToolStripItem объектов, подлежащих отображению, и добавляют к CheckList.

Прямо сейчас, это требует, чтобы я дал ему тип или массив типов, чтобы он мог установить себя, какой тип CollectionEditor он есть. Я не могу показать ниспадающие типы или выпадающие объекты ToolStripItem. Любой класс, имеющий ToolStrip в своем имени, наследует ToolStripItem, поэтому я использую этот тип объекта.

Если НИКОМУ имеет какую-либо рекомендацию на моем текущем ответ или может прогнозировать предсказуемые ошибки, пожалуйста, поделитесь. Мне все равно, если вы говорите в C# или vb.net. Может быть, мне просто нужно остановиться и превратить это в код C#. Возможно, это невозможно. Однако я добиваюсь прогресса. Что было бы чрезвычайно полезным является выяснение того, как редактор коллекции MenuStrip является возможность заполнить выпадающий ToolStripItems

[Update]

Редактор коллекции требует, чтобы обеспечить тип для отображения. Этот тип должен наследовать CollectionBase, что означает, что во время разработки нет возможности ссылаться на dropdownitems. : sigh:

Смежные вопросы