gpt4 book ai didi

c# - 在运行时创建/修改枚举

转载 作者:太空狗 更新时间:2023-10-29 19:47:37 25 4
gpt4 key购买 nike

我正在创建一个程序,用户可以在其中创建自己的自定义属性,这些属性最终将显示在 PropertyGrid 中。现在我不想弄乱自定义编辑器,所以我只允许原始类型属性(stringintdoubleDateTimebool 等),PropertyGrid 已经在编辑器中为其构建。

但是,我还想为用户提供创建多项选择属性的选项,他们可以在其中定义可能值的列表,而这些值又将显示为 PropertyGrid 中的下拉列表。

当我在代码中对 Enum 进行硬编码时,属性网格会自动将该 enum 的属性显示为下拉列表。但是我能否在运行时创建和/或修改枚举,以便用户可以添加另一个属性选项,然后返回到 PropertyGrid 并在下拉列表中查看他们的新选项?

更新

考虑到 Patricks 的评论,我认为 Enum 在这种情况下不是正确的方法。那么我如何使用字符串列表来填充 PropertyGrid 项目中的下拉列表呢?这需要自定义编辑器吗?

最佳答案

答案在一个简单的类中:TypeConverter。 (是的,枚举在这里不合适)。

由于我没有很多细节,我假设您有一个通过 SelectedObject 属性“链接”到目标实例的 PropertyGrid,并且您的目标实例实现了 ICustomTypeDescriptor,以便您可以在运行时添加属性(即 PropertyDescriptors) .我不知道你的设计,但如果你不是这样做的,我建议你看看它。

现在假设您添加了一个字符串属性,并且您想让您的用户为此属性指定一组约束。您的 UI 让用户输入一组字符串,然后您会得到一个字符串列表。也许您在目标实例中保留了一个属性字典,所以我们假设这个新列表也存储在那里。

现在,只需编写一个从 TypeConverter(或本例中的 StringConverter)派生的新转换器。您将必须覆盖 GetStandardValuesSupported 以返回 true 和 GetStandardValues 以返回字符串列表(使用上下文参数访问实例属性及其字符串列表)。此转换器将由您的 PropertyDescriptor 使用 PropertyDescriptor.Converter 属性发布。

我希望这不是太模糊。如果您对此过程有任何具体问题,请告诉我。

关于c# - 在运行时创建/修改枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/746128/

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