我正在尝试为ToolStripMenuItem
构建一个自动处理项目检查和取消检查的检查列表,然后我向程序员提供一个事件,允许他们处理接下来发生的事情。如果这样的事情已经存在,我会很乐意知道它在哪里。我已为自定义ToolStripMenuItem
创建了收藏编辑器,我可以将检查清单添加到此清单集合中。我的问题是你创建这样的集合编辑器:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Editor(typeof(ToolStripItemExtCollectionEditor), typeof(UITypeEditor))]
我需要能够将此ToolStripMenuItem
DropDownitems
传递给此集合编辑器,以便在添加新核对清单并单击核对清单的items属性时添加/从清单中删除任何一个已知的ToolStripMenuItems。传递参考文章不会起作用,因为所有这一切都发生在一个属性中,如果答案是反思,我就不知道从哪里开始。
答案 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。 :叹息: