代码之家  ›  专栏  ›  技术社区  ›  Jerry Dodge

如何为单个属性编辑器使用两个属性?

  •  0
  • Jerry Dodge  · 技术社区  · 7 年前

    提到 this prior question/answer

    我为一个完全不同的目的创建了另一个属性编辑器。在本例中,它是一个类型为的字形字符选择器 String (因为它 包含多个字形字符)。与我在前面提到的问题/答案中的另一个不同,这个问题/答案非常特定于特定土地上的特定属性 TCollectionItem 我的职业。

    一切都很好,我可以为这个特定的属性调用这个属性编辑器。然而,我有一个两难的选择。属性编辑器本质上与字体直接相关。用户可以从特定字体中选择字符(字形)。我的属性编辑器可以更改字体,并浏览该字体中包含的字形。

    TFont 所有物当涉及到两者的结合时,问题就出现了 Glyph Font 在同一个属性编辑器中使用的属性。当我为 字形 字体 它需要使用。相反,当用户在此编辑器中选择字体和字形字符时,它还需要同时更新 字体

    长话短说, PropertyB 取决于 PropertyA . 如果 房地产a 房地产b 将有一组完全不同的可能值。因此,我在IDE中安装的任何编辑器都需要允许用户更改 同时

    如何使属性编辑器能够访问多个属性?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Remy Lebeau    7 年前

    TPropertyEditor 有一个公共 GetComponent() 方法,您可以使用该方法访问其属性当前正在编辑的对象(如果属性编辑器允许,可以同时编辑具有相同属性的多个对象)。然后,您将可以访问同一对象中的所有其他属性。

    一次只能有一个属性,尽管它可能对其他属性具有只读依赖性。例如 Glyph 属性编辑器 编辑 Font 房地产,反之亦然,不是一个好的设计。但是组件编辑器 两者都是完全可以接受的。

        2
  •  0
  •   Jerry Dodge    7 年前

    解决方案1

    实现组件编辑器而不是属性编辑器。这样的组件编辑器可以访问整个组件,而不仅仅是单个属性。

    TPersistent 类,然后创建 TClassProperty t持久性 将调用一个组合属性编辑器,该编辑器可以访问该类中的所有属性。一个很好的现有示例是 TFont 编辑