完全禁用集合编辑器



我在 PropertyGrid 中使用自定义动态类对象(代码太多,无法在此处发布)。 简而言之,它的作用是允许我在运行时从任意输入创建属性(在本例中为 XML,但这无关紧要)。这些属性可以是任何类型,包括另一个自定义类,因此它们可以无限期嵌套。

我遇到的问题是 PropertyGrid 将此类视为集合,并且在"值"列中有一个按钮,允许您打开 CollectionEditor。这(除其他外)具有"添加"和"删除"按钮,这两个按钮都将从根本上破坏自定义类。与其尝试让这两个复杂的系统很好地协同工作,我宁愿简单地完全禁用 CollectionEditor。我有另一个系统,它允许您查看类的子对象(通过将 PropertyGrid.SelectedObject 设置为子对象),并且它工作正常。我希望用户甚至没有看到CollectionEditor的选项,因为它似乎与该系统完全不兼容。

理想情况下,我只想在"值"列中放置一个按钮,我可以捕获点击事件并自行处理,但这是可选的。我也不在乎是只为有问题的行还是整个 PropertyGrid 禁用 CollectionEditor。我不会以任何一种方式使用它,所以任何让它无法访问的东西都会很好。

您是否尝试过派生自己的 CollectionEditor 并在那里覆盖一些方法/事件以使其形式不显示并返回而不执行任何操作?

然后,您需要使用以下内容标记集合类型属性:

[EditorAttribute(typeof(MyCollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]

这将在单击"..."按钮,以标记属性网格中的集合属性。

您可能还需要继承 PropertyDescriptor 并重写 GetEditor 方法以返回您自己的 CollectionEditor。

最新更新