这个答案适用于 VB.NET。我计划把它变成 C# 的 DLL,但现在它在 vb.net 中,因为这是我开始这个想法的地方以及项目所在的语言。
这是我到目前为止所拥有的:
ToolStripMenuItemExt
目的:我的习惯ToolStripMenuItem
。
ToolStripMenuItemExt
有一个CheckListSheet
包含对ToolStripMenuItemExt
's DropDownItems 的引用(我传入的是 dropdownitems byref 而不是 byval)。它有一个属性可以返回 中的CheckLists
对象CheckListSheet
。
清单表
目的:通过可观察的集合类型和我返回的集合的对象来维护对我正在观察的集合的引用ToolStripMenuItemExt
。
CheckListSheet
有CheckLists
对象。我通过 byref 传递的下拉项存储在一个ObservableToolStripItemCollection
其中,希望当我开始测试它时,我可以更轻松地更新清单集合,因为它继承了ObservableCollection(of ToolStripItemCollection)
. 这个类还有一个共享函数,它返回具有私有共享范围标识符的可观察集合。
清单
用途:CollectionBase
存储CheckList
对象的类型。
清单
目的:存储ToolStripItemCollection
其对象作为单项检查清单(一次只检查一项)。
这具有设计器的一些属性和检查列表的集合。最终,我将添加逻辑以检查并自动取消选中并为其引发事件。
MenuItemCheckListCollectionEditor
目的:允许将已知和实例化 ToolStripItem
对象的集合显示并添加到CheckList
.
现在它要求我给它一个类型或类型数组,以便它可以确定CollectionEditor
它是什么类型。我无法显示类型的下拉列表或ToolStripItem
对象的下拉列表。任何名称中包含 ToolStrip 的类都会继承 ToolStripItem,这就是我使用这种类型的对象的原因。
如果有人对我当前的答案有任何建议或可以预测任何可预见的陷阱,请分享。我不在乎你是用 c# 还是 vb.net 说话。也许我只需要停下来把它变成 c# 代码。也许这是不可能的。不过我正在取得进展。弄清楚 MenuStrip 的集合编辑器如何填充 ToolStripItems 的下拉列表将非常有帮助
[更新]
集合编辑器要求您提供一种类型以供其显示。这种类型必须继承CollectionBase
,这意味着在设计时它无法引用下拉项。:叹: