我在PropertyGrid中使用自定义动态类对象(此处发布的代码太多)。简而言之,它的作用是允许我在运行时从任意输入创建属性(在这种情况下是XML,但这不是重点)。这些属性可以是任何类型,包括另一个自定义类,因此它们可以无限期嵌套。
我遇到的问题是PropertyGrid将此类视为Collection,并且Value列中的按钮允许您打开CollectionEditor。这(除其他外)具有添加和删除按钮,这两个按钮将从根本上打破自定义类。我没有尝试让这两个复杂的系统很好地协同工作,而是完全禁用CollectionEditor。我有另一个系统,允许您查看类的子对象(通过将PropertyGrid.SelectedObject设置为子对象),它工作正常。我更喜欢用户甚至没有选择看到CollectionEditor,因为它似乎根本不兼容这个系统。
理想情况下,我想在“值”列中放置一个按钮,我可以捕获点击事件并自行处理,但这是可选的。我也不在乎我是否只针对有问题的行或整个PropertyGrid禁用CollectionEditor。我不是以任何一种方式使用它,所以任何使它无法访问的东西都会很好。
答案 0 :(得分:1)
您是否尝试过派生自己的CollectionEditor并在那里覆盖一些方法/事件以使其表单不显示并且只返回而不做任何事情?
然后,您需要使用以下标记收集类型属性:
[EditorAttribute(typeof(MyCollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]
当点击PropertyGrid中标记的集合属性的“...”按钮时,这将自动启动MyCollectionEditor。
您可能还需要继承PropertyDescriptor并覆盖GetEditor方法以返回您自己的CollectionEditor。