将对象传递给集合编辑器

时间:2014-09-10 14:46:12

标签: c# winforms windows-forms-designer collectioneditor design-time-data

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

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

我需要能够将此ToolStripMenuItem DropDownitems传递给此集合编辑器,以便在添加新核对清单并单击核对清单的items属性时添加/从清单中删除任何一个已知的ToolStripMenuItems。传递参考文章不会起作用,因为所有这一切都发生在一个属性中,如果答案是反思,我就不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

这个答案适用于VB.NET。我打算把它转换成一个DLL的C#,但是现在它在vb.net中,因为那是我开始这个想法的地方和项目所在的语言。

这是我到目前为止所拥有的:

<强> ToolStripMenuItemExt

目的:我的自定义ToolStripMenuItem

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

<强> CheckListSheet

目的:通过可观察的集合类型和我在ToolStripMenuItemExt中返回的集合的对象,维护对我正在观察的集合的引用。

CheckListSheet包含CheckLists个对象。我在passref中传递的dropdownitems存储在ObservableToolStripItemCollection中,希望在我进行测试时,它允许我更新核对清单的集合,因为它继承了ObservableCollection(of ToolStripItemCollection)。该类还有一个共享函数,它返回一个可观察的集合,该集合的作用域标识符为private shared。

<强>清单

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

<强>核对表

目的:存储ToolStripItemCollection,其对象作为单项检查清单(一次只检查一项)。

这有设计师的一些属性和检查列表的集合。最后,我将添加逻辑以检查并自动取消选中并为其引发事件。

<强> MenuItemCheckListCollectionEditor

目的:允许显示 已知和实例化 ToolStripItem对象的集合,并将其添加到CheckList

现在它要求我给它一个类型或类型数组,这样它就能确定它是什么类型的CollectionEditor。我无法显示类型的下拉列表或ToolStripItem个对象的下拉列表。名称中包含ToolStrip的任何类都继承了ToolStripItem,这就是我使用这种类型对象的原因。

如果 任何人 对我当前的答案有任何建议或预测任何可预见的陷阱,请分享。如果你在c#或vb.net上讲话,我不在乎。也许我只需要停下来把它变成c#代码。也许这是不可能的。我虽然取得了进步。什么是非常有用的是弄清楚MenuStrip的集合编辑器如何能够填充ToolStripItems的下拉列表

[更新]

集合编辑器要求您提供要显示的类型。这种类型必须继承CollectionBase,这意味着在设计时它无法引用dropdownitems。 :叹息: