为什么选择多个项目时,为什么对对象检查器隐藏了某些属性?

Why some properties are hidden from Object Inspector when more than one item is selected?

我注意到当 select 处理多个项目时,对象检查器 中的某些属性会消失。

为什么会发生这种情况以及如何在创建组件时控制这种行为?

示例:

向表单添加 2 个按钮 (TButton),并 select 其中一个。

Object Inspector 中,您可以看到所有 TButton 的已发布属性(请注意还有 Constraints 属性)。

将另一个按钮添加到当前 selection(按住 Shift 键的同时单击)。

如您所见,某些属性已从 Object Inspector 中隐藏(请注意 Constraints 不再可见)。

是否在选择多个对象时显示 属性 由为该 属性 配置的 属性 编辑器 控制。 属性 编辑器(来自 DesignEditors.pas 中的 TPropertyEditor)有一个 GetAttributes 方法,该方法 return 是一组属性向编辑器申请。如果集合包含 paMultiSelect,则将显示 属性。

鉴于 属性 值显示为约束值,而不仅仅是 (TSizeConstraints),我得出结论,属性 没有使用通用 TClassProperty 编辑器。该编辑器设置 paMultiSelect,但根据您的图片,属性 编辑器设置为 TSizeConstraints 没有。这可能是一个疏忽。

您可以尝试注册自己的 属性 编辑器。找到当前为 TSizeConstraints 注册的 属性 编辑器(例如,通过搜索 TSizeConstraints 的源代码),并在设计时包中声明一个新的class 是那个的后裔。将 GetAttributes 覆盖为 return 您需要的值。最后,按照代码其他地方的示例调用 RegisterPropertyEditor.