3

我试图建立一个ToolStripMenuItem的检查列表,它自动处理一个项目的检查和取消选中,然后我向程序员提供一个事件,允许他们处理接下来会发生的事情。如果这样的事情已经存在,我很乐意知道它在哪里。我为我的自定义ToolStripMenuItem创建了收藏夹编辑器,并且我可以将检查列表添加到此收集清单中。我的问题是您创建集合编辑器这样的:传递一个对象到一个集合编辑器

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

我需要能够对这个ToolStripMenuItemDropDownitems传递给该集合编辑器,所以当你添加一个新的清单,然后按一下清单的项目属性您可以在清单中添加/删除任何一个已知ToolStripMenuItem。传递引用不起作用,因为所有这些都发生在属性内部,如果答案是反射,我不知道从哪里开始。

+0

从哪里开始:在你的'ToolStripItemExtCollectionEditor'类中设置一些断点并检查你到达的值。 – 2014-09-10 15:05:25

+0

到目前为止我发现的是选择组件启动对集合编辑器的构造函数的调用,并打开集合CreateNewItemTypes()被调用。有没有办法让我调试我的设计师?如果我能够做到这一点,我可能会看到谁在调用属性构造函数。 – Luminous 2014-09-10 15:43:49

+0

也许你可以启动VS的第二个实例,并将调试器连接到它。我知道这适用于Expression Blend。 – Dirk 2014-09-10 15:48:58

回答

0

此答案适用于VB.NET。我计划变成C#这一个DLL,但现在它在vb.net,因为那是我从开始这个想法和语言的项目是

这里是我到目前为止:

ToolStripMenuItemExt

目的:我的自定义ToolStripMenuItem

ToolStripMenuItemExt有一个CheckListSheet其中包含ToolStripMenuItemExt的DropDownItems(我通过dropdownitems byref而不是byval传入)的引用。它有一个属性返回CheckListSheet中的CheckLists对象。

CheckListSheet

目的:保持对我通过观察集合式观察采集和收集我ToolStripMenuItemExt返回一个对象的引用。

CheckListSheetCheckLists对象。我通过byref传递的下拉项存储在ObservableToolStripItemCollection中,希望当我进行测试时,它允许我更容易地更新清单的集合,因为它继承了ObservableCollection(of ToolStripItemCollection)。这个类还有一个共享函数,它返回具有私有共享范围标识符的可观察集合。

清单

目的:存储CheckList对象CollectionBase类型。

核对表

用途:存储其对象作为一个单一的项目检查清单(只有一个项目在一个时间检查)的ToolStripItemCollection

这对设计师和检查列表的集合有一些属性。最终我会添加逻辑来检查并自动取消选中并为其启动一个事件。

MenuItemCheckListCollectionEditor

用途:允许的已知的集合,并且实例化ToolStripItem对象被显示,并加入到一个CheckList

现在它要求我给它一个类型或数组的类型,因此它可以建立它自己的什么类型CollectionEditor。我无法显示类型的下拉列表或下拉对象的下拉列表。任何名称中都有ToolStrip的类继承ToolStripItem,这就是我使用这种类型的对象的原因。

如果ANYONE对我目前的答案的任何意见或预测可以任何可预见的陷阱,请分享。我不在乎你是用c#还是vb.net进行交流。也许我只需要停下来,把它变成C#代码。也许这是不可能的。尽管我正在取得进展。什么是非常有帮助的是搞清楚的MenuStrip的集合编辑器如何能够填充ToolStripItems

的下拉

[更新]

集合编辑器需要你提供一个类型,它显示。此类型必须继承CollectionBase,这意味着在设计时无法引用下拉项。 :感叹:

相关问题