gpt4 book ai didi

delphi - 如何使用通用TList的OnNotify

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

我想使用通用 TList 的 OnNotify 事件。将过程分配给 OnNotify 会产生错误消息:

E2010 Incompatible types: 'System.Generics.Collections.TCollectionNotification' and 'System.Classes.TCollectionNotification'

我正在声明一个类,并在其中使用通用 TList,如下所示:

TEditor_Table = class (TObject)
public
FEditors: TList<TGradient_Editor>; // List containing the editors

这不是最好的方法,但我需要它来进行测试。该列表在构造函数中实例化:

constructor TEditor_Table.Create (Owner: TFMXObject);
begin
inherited Create;

FEditors := TList<TGradient_Editor>.Create;
FOwner := Owner;
end; // Create //

接下来在主窗体中声明一个函数

procedure do_editor_change (Sender: TObject; const Item: TGradient_Editor; Action: TCollectionNotification);

TColor_Editor 类实例化如下:

FColor_Editor := TEditor_Table.Create (List_Gradients);
FColor_Editor.FEditors.OnNotify := do_editor_change;
^
error occurs here----------------------------------+

我根本不理解这个消息,我不明白为什么编译器似乎混淆了这两个单元:“System.Generics.Collections.TCollectionNotification”和“System.Classes.TCollectionNotification”。我做错了什么?

最佳答案

问题在于 RTL 定义了两个不同版本的 TCollectionNotification 。一中System.ClassesGenerics.Collections 中的一个。

您正在使用TList<T>来自Generics.Collections所以需要TCollectionNotification来自Generics.Collections 。但在你的代码中TCollectionNotificationSystem.Classes 中声明的版本。那是因为,在你写 TCollectionNotification 的地方, System.ClassesGenerics.Collections 之后使用.

解决方案是:

  1. 更改使用顺序,以便 Generics.Collections出现在 System.Classes 之后。无论如何,这都是一个很好的做法。或者,
  2. 完整指定类型:Generics.Collections.TCollectionNotification .

关于delphi - 如何使用通用TList的OnNotify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19845749/

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