gpt4 book ai didi

c# - 将对象传递给集合编辑器

转载 作者:行者123 更新时间:2023-11-30 18:28:06 25 4
gpt4 key购买 nike

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

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

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

最佳答案

这个答案适用于 VB.NET。我计划将其转换为 DLL 的 C#,但目前它在 vb.net 中,因为这是我开始这个想法的地方以及项目所使用的语言。

这是我目前所拥有的:

ToolStripMenuItemExt

用途:我的自定义 ToolStripMenuItem

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

检查表

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

CheckListSheet 具有 CheckLists 对象。我在 byref 中传递的下拉项存储在 ObservableToolStripItemCollection 中,希望当我开始测试它时,它可以让我更轻松地更新 list 集合,因为它继承了 ObservableCollection(of ToolStripItemCollection) .该类还有一个共享函数,该函数返回具有私有(private)共享范围标识符的可观察集合。

list

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

list

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

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

MenuItemCheckListCollectionEditor

用途:允许显示一组已知和实例化 ToolStripItem 对象并将其添加到CheckList .

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

如果任何人对我当前的答案有任何建议或可以预测任何可预见的陷阱,请分享。我不在乎你是用 c# 还是 vb.net 说话。也许我只需要停下来并将其转换为 C# 代码。也许这是不可能的。不过我正在取得进步。弄清楚 MenuStrip 的集合编辑器如何能够填充 ToolStripItems 的下拉列表将非常有帮助

[更新]

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

关于c# - 将对象传递给集合编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com