为啥选择多个项目时,某些属性从对象检查器隐藏起来?
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选择器$("...")返回的是数组,为啥还能继续练式操作$("...").方法 ?