C# 修改PropertyGrid和TypeConverterAttribute的默认行为

C# 修改PropertyGrid和TypeConverterAttribute的默认行为,c#,winforms,propertygrid,C#,Winforms,Propertygrid,除其他事项外,我正在使用属性网格编辑项目集合: 集合的默认行为提供了一个+按钮来编辑数组的每个成员 我正在使用表单编辑此字段,该字段已连接,但我想删除用户使用“扩展器”编辑阵列的功能 所以看起来是这样的: UPDATE1:将productId设置为IList属性,而不是int[] 现在这样做: -----------------! UPDATE2:使productId成为自定义类,例如 MyWrappedCollection : IEnumerable<int> MyWra

除其他事项外,我正在使用属性网格编辑项目集合:

集合的默认行为提供了一个+按钮来编辑数组的每个成员

我正在使用表单编辑此字段,该字段已连接,但我想删除用户使用“扩展器”编辑阵列的功能

所以看起来是这样的:

UPDATE1:将productId设置为IList属性,而不是int[] 现在这样做:

-----------------!

UPDATE2:使productId成为自定义类,例如

 MyWrappedCollection : IEnumerable<int>
MyWrappedCollection:IEnumerable
现在看起来是这样的:


当然,它仍然显示[+],但它不会扩展到任何内容(即单击它时消失)

默认情况下,对于集合,它使用
[…]
方法。可能您可以使用集合(例如列表)而不是数组


顺便问一下,您使用数组的具体原因是什么?

您需要实现并应用UITypedEditor。看


重写UITypeEditor的GetEditStyle,以返回模态

控制属性是否可扩展的属性是它的类型转换器。ExpandableObjectConverter是一个内置类,它提供了扩展属性并查看其自身属性的能力。我猜默认情况下,数组和集合使用此转换器来显示其中的内容


您可以编写自己的TypeConverter,它不是从ExpandableObjectConverter继承的,并将其设置为属性以删除+。

我将ProductId设置为IList而不是int[],您仍然可以扩展它。请看原始帖子上的截图。对批评表示歉意,但是你的回答并没有提供太多帮助。是的,[…]只在您单击它时才显示。我已将UITypeEditor属性附加到此属性。编辑器覆盖GetEditStyle以返回模式(因为我使用它弹出表单),但是扩展图标仍然出现。干杯。出于某种原因,我的类型转换器扩展了ExpandableObjectConverter,而我的类型转换器应该只有:TypeConverter。