此答案适用于VB.NET。我计划变成C#这一个DLL,但现在它在vb.net,因为那是我从开始这个想法和语言的项目是
这里是我到目前为止:
ToolStripMenuItemExt
目的:我的自定义ToolStripMenuItem
。
ToolStripMenuItemExt
有一个CheckListSheet
其中包含ToolStripMenuItemExt
的DropDownItems(我通过dropdownitems byref而不是byval传入)的引用。它有一个属性返回CheckListSheet
中的CheckLists
对象。
CheckListSheet
目的:保持对我通过观察集合式观察采集和收集我ToolStripMenuItemExt
返回一个对象的引用。
CheckListSheet
有CheckLists
对象。我通过byref传递的下拉项存储在ObservableToolStripItemCollection
中,希望当我进行测试时,它允许我更容易地更新清单的集合,因为它继承了ObservableCollection(of ToolStripItemCollection)
。这个类还有一个共享函数,它返回具有私有共享范围标识符的可观察集合。
清单
目的:存储CheckList
对象CollectionBase
类型。
核对表
用途:存储其对象作为一个单一的项目检查清单(只有一个项目在一个时间检查)的ToolStripItemCollection
。
这对设计师和检查列表的集合有一些属性。最终我会添加逻辑来检查并自动取消选中并为其启动一个事件。
MenuItemCheckListCollectionEditor
用途:允许的已知的集合,并且实例化ToolStripItem
对象被显示,并加入到一个CheckList
。
现在它要求我给它一个类型或数组的类型,因此它可以建立它自己的什么类型CollectionEditor
。我无法显示类型的下拉列表或下拉对象的下拉列表。任何名称中都有ToolStrip的类继承ToolStripItem,这就是我使用这种类型的对象的原因。
如果ANYONE对我目前的答案的任何意见或预测可以任何可预见的陷阱,请分享。我不在乎你是用c#还是vb.net进行交流。也许我只需要停下来,把它变成C#代码。也许这是不可能的。尽管我正在取得进展。什么是非常有帮助的是搞清楚的MenuStrip的集合编辑器如何能够填充ToolStripItems
的下拉
[更新]
集合编辑器需要你提供一个类型,它显示。此类型必须继承CollectionBase
,这意味着在设计时无法引用下拉项。 :感叹:
从哪里开始:在你的'ToolStripItemExtCollectionEditor'类中设置一些断点并检查你到达的值。 – 2014-09-10 15:05:25
到目前为止我发现的是选择组件启动对集合编辑器的构造函数的调用,并打开集合CreateNewItemTypes()被调用。有没有办法让我调试我的设计师?如果我能够做到这一点,我可能会看到谁在调用属性构造函数。 – Luminous 2014-09-10 15:43:49
也许你可以启动VS的第二个实例,并将调试器连接到它。我知道这适用于Expression Blend。 – Dirk 2014-09-10 15:48:58