为啥选择多个项目时,某些属性从对象检查器隐藏起来?

Posted

技术标签:

【中文标题】为啥选择多个项目时,某些属性从对象检查器隐藏起来?【英文标题】:Why some properties are hidden from Object Inspector when more than one item is selected?为什么选择多个项目时,某些属性从对象检查器隐藏起来? 【发布时间】:2017-03-29 12:18:53 【问题描述】:

我注意到某些属性从对象检查器 em>选择多个项目时会消失。

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

示例:

将 2 个按钮 (TButton) 添加到表单并选择其中一个。

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

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

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

【问题讨论】:

【参考方案1】:

选择多个对象时是否显示属性由为该属性配置的属性编辑器控制。属性编辑器(源自 DesignEditors.pas 中的 TPropertyEditor)有一个 GetAttributes 方法,该方法返回一组适用于编辑器的属性。如果集合中包含paMultiSelect,则显示该属性。

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

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

【讨论】:

以上是关于为啥选择多个项目时,某些属性从对象检查器隐藏起来?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我使用有效的 withLatestFrom 操作从选择器获取具有动作观察者属性的对象?

在共享相同项目道具的多个组件中隐藏选择

jquery选择器$("...")返回的是数组,为啥还能继续练式操作$("...").方法 ?

设计模式 - 如何仅在某些情况下强制执行对象属性(构建器模式,依赖注入)

为啥 jQuery 3 不能识别属性选择器中的“#”字符?

jQuery 选择器 - 检查当前 div 属性是不是包含文本?