请参阅我的this prior question/answer组合。它描述了如何为IDE创建属性编辑器。
我创建了另一个属性编辑器,用于完全不同的目的。在这种情况下,它是String
类型的字形字符选择器(因为它可以包含多个字形字符)。与我在提到的问题/答案中的另一个不同,这个问题非常特定于我的特定TCollectionItem
类的特定属性。
一切都很好,我可以为这个特定的属性调用这个属性编辑器。但是,我有一个两难的境地。属性编辑器本质上与字体直接相关。用户可以从特定字体中选择字符(字形)。我的属性编辑器可以更改字体,并浏览该字体中包含的字形。
我的这个组件还具有在单独的TFont
属性中指定字体的功能。当涉及在同一属性编辑器中使用的Glyph
属性和Font
属性的组合时,会出现问题。当我为Glyph
属性调用此编辑器时,它还需要知道它需要使用的Font
。相反,当用户在此编辑器中选择字体和字形字符时,还需要同时更新Glyph
和Font
属性。
长话短说,PropertyB
取决于PropertyA
。如果PropertyA
发生变化,那么PropertyB
将会有一组完全不同的可能值。因此,我在IDE中安装的任何编辑器都需要允许用户同时更改 PropertyA
和PropertyB
。
如何让属性编辑器可以访问多个属性?
答案 0 :(得分:3)
-v
有一个公共TPropertyEditor
方法,您可以使用它来访问当前正在编辑其属性的对象(可以同时编辑具有相同属性的多个对象,如果属性编辑器允许它)。然后,您将可以访问同一对象中的所有其他属性。
话虽这么说,如果您的编辑器显示一个用于编辑的弹出对话框,它应该作为组件编辑器实现,而不是(或除了)属性编辑器。属性编辑器一次只能编辑一个属性,尽管它可能具有其他属性的只读依赖性。例如,{em>编辑 GetComponent()
属性的Glyph
属性编辑器,反之亦然,这不是一个好的设计。但编辑的组件编辑器完全可以接受。
答案 1 :(得分:0)
代替属性编辑器,实现组件编辑器。这样的组件编辑器可以访问整个组件,而不仅仅是单个属性。
将您的所有属性包装在专用的TPersistent
类中,然后为该类创建一个TClassProperty
属性编辑器。各个属性实际上不会调用属性编辑器。相反,他们的父TPersistent
将调用一个组合属性编辑器,该编辑器可以访问此类中的所有属性。一个很好的现有示例是TFont
编辑器。