将对象传递给集合编辑器

本文关键字:集合 编辑器 对象 | 更新日期: 2023-09-27 18:21:27

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

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

我需要能够将这个ToolStripMenuItemDropDownitems传递给这个集合编辑器,这样当您添加一个新的检查表并单击检查表的items属性时,您就可以向检查表中添加/删除任何一个已知的ToolStripMenuItems。传递引用是不起作用的,因为所有这些都发生在属性内部,如果答案是反射,我不知道从哪里开始。

将对象传递给集合编辑器

这个答案适用于VB.NET。我计划把它变成DLL的C#,但现在它在VB.NET中,因为这是我开始这个想法的地方,也是项目使用的语言。

到目前为止,我拥有的是:

ToolStripMenuItemExt

用途:我的自定义ToolStripMenuItem

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

检查清单

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

CheckListSheet具有CheckLists对象。我在byref中传递的下拉项存储在ObservableToolStripItemCollection中,希望当我开始测试时,它能让我更容易地更新检查表集合,因为它继承了ObservableCollection(of ToolStripItemCollection)。这个类还有一个共享函数,它返回具有private shared作用域标识符的可观察集合。

检查列表

用途:存储CheckList对象的CollectionBase类型。

检查列表

用途:存储ToolStripItemCollection,其对象充当单个项目检查清单(一次只检查一个项目)。

它有一些用于设计器的属性和用于检查列表的集合。最终,我将添加逻辑以进行检查,并自动取消选中并为其引发事件

菜单项检查列表集合编辑器

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

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

如果任何人对我目前的回答有任何建议,或者可以预测任何可预见的陷阱,请分享。我不在乎你是用c#还是用vb.net。也许我只需要停下来把它变成c#代码。也许这是不可能的。不过我正在进步。最有帮助的是弄清楚MenuStrip的集合编辑器如何填充ToolStripItems 的下拉列表

[更新]

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