gpt4 book ai didi

delphi - 使用 LiveBindings 监控列表

转载 作者:行者123 更新时间:2023-12-03 14:54:20 26 4
gpt4 key购买 nike

我一直在尝试找到一种通用方法来通知 UI 控件列表中的更改。例如,当一个对象添加到列表中时,我希望它自动添加到列表框中。如果从列表中删除一个对象,我希望它自动从列表框中删除。

不幸的是,Delphi 的列表之间存在一些令人抓狂的不一致:TList<>.Notify 很好,但 TStringList.OnChange 甚至不告诉您更改是什么,而且 TList 甚至没有任何通知!

我希望 LiveBindings 能够为我提供一种监视大多数列表中的更改的正确方法,但到目前为止我还没有看到它。我见过的所有示例都填充控件并设置列表项和控件项(在我的示例中为列表框项)之间的绑定(bind)。但是从列表中添加/删除对象根本不会影响控件。

有谁知道我错过了一个机制,或者更一般地说,一个很好的通用方法来做到这一点?

澄清:看来我之前说的还不够清楚。我需要一种通用方法的原因是因为我编写了一个可以连接到各种源(包括一些现有代码)的网格控件。我编写了一个网格接受作为源的接口(interface),然后编写了一些适配器类来接受一些列表并使它们可用作该接口(interface)。由于我还需要接受现有代码,因此无法选择覆盖 TList.Notify。由于没有事件来查看更改,这实际上意味着 TList 没有可供客户端使用的通知机制,例如我的适配器类。 TStrings 也没有,但 TStringList 引发了一个简单的 OnChange,这意味着适配器类实际上无法确定发生了什么变化。

我实际上有一个非常好的解决方案,使用 TVirtualMethodInterceptor ,但这在 Delphi XE 中完全停止工作,并且在 XE2 中也没有修复。

最佳答案

您错过了 TList.Notify 机制。

TList 有一个 protected Notify 过程,您必须覆盖该过程。这就是 TObjectList 的工作方式。

关于delphi - 使用 LiveBindings 监控列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7398862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com