在运行时创建/修改枚举

Eri*_*tas 8 c# propertygrid enums

我正在创建一个程序,用户可以选择创建自己的自定义属性,最终将显示在一个PropertyGrid.现在我不想用自定义编辑器的一塌糊涂,所以我只允许基本类型的属性(string,int,double,DateTime,bool等)的PropertyGrid已经具有内置的编辑器.

但是,我还想让用户选择创建多个选项属性,他们可以定义一个可能的值列表,这些值又会显示为下拉列表PropertyGrid.

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

更新

考虑到帕特里克的评论,我认为Enum在这种情况下,s不是正确的方法.那么我怎样才能使用字符串列表来填充项目中的下拉PropertyGrid菜单?这需要自定义编辑器吗?

Nic*_*hac 5

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

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

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

现在,只需编写一个从TypeConverter派生的新转换器(或者在此示例中为StringConverter).您必须重写GetStandardValuesSupported以返回true,并使用GetStandardValues返回字符串列表(使用context参数访问Instance属性及其字符串列表).此转换器将由PropertyDescriptor使用PropertyDescriptor.Converter属性发布.

我希望这不是太模糊.如果您对此过程有特定问题,请告诉我.