1

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

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

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

4

1 回答 1

1

您是否尝试过派生自己的 CollectionEditor 并在其中覆盖一些方法/事件以使其形式不出现而直接返回而不做任何事情?

然后,您需要使用以下命令标记您的集合类型属性:

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

当单击 PropertyGrid 中标记的集合属性的“...”按钮时,这将自动启动您的 MyCollectionEditor。

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

于 2012-05-04T15:00:29.557 回答