Delphi 12中如何为自定义带事件的类创建跨单元事件监听器
在其他单元监听TPathList的ListChangedEvent事件
要在其他单元监听自定义类的事件,只需按以下步骤实现:
1. 引用PathList单元
在需要监听事件的单元(比如主窗体单元)的uses列表中添加PathList,确保能访问TPathList类和事件类型。
2. 声明事件处理方法
在目标类(比如窗体类)中声明一个与TListChangedEvent签名完全匹配的方法,必须包含of object关键字(表示这是类成员方法)。
3. 绑定事件到处理方法
创建TPathList实例后,将事件处理方法赋值给ListChangedEvent属性;销毁实例前建议解绑事件,避免潜在的悬挂引用。
完整示例代码
主窗体单元(MainForm.pas)
unit MainForm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, PathList; // 引用自定义类单元 type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FPathListA: TPathList; FPathListB: TPathList; // 事件处理方法,签名与TListChangedEvent完全一致 procedure HandleListChanged(Sender: TObject); public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin // 创建两组数据对应的TPathList实例 FPathListA := TPathList.Create('图片路径'); FPathListB := TPathList.Create('文档路径'); // 绑定事件处理方法 FPathListA.ListChangedEvent := HandleListChanged; FPathListB.ListChangedEvent := HandleListChanged; end; procedure TForm1.FormDestroy(Sender: TObject); begin // 销毁前解绑事件(可选但推荐) FPathListA.ListChangedEvent := nil; FPathListB.ListChangedEvent := nil; // 释放实例 FPathListA.Free; FPathListB.Free; end; procedure TForm1.HandleListChanged(Sender: TObject); var TargetList: TPathList; begin // 将Sender转换为TPathList类型,获取触发事件的实例信息 if Sender is TPathList then begin TargetList := TPathList(Sender); ShowMessage(Format('[%s]列表已更新,当前条目数:%d', [TargetList.PathType, TargetList.Size])); // 这里添加你的业务逻辑,比如刷新UI、同步数据等 end; end; end.
补充:触发事件的时机
要让事件真正生效,需要在TPathList类的数据发生变更时调用DoListChangedEvent方法。比如给TPathList添加修改Size的方法:
// 在PathList单元的TPathList类public部分添加 procedure SetNewSize(NewSize: Integer); // 实现部分 procedure TPathList.SetNewSize(NewSize: Integer); begin if FSize <> NewSize then begin FSize := NewSize; // 数据变更时触发事件 DoListChangedEvent(Self); end; end;
当你在其他单元调用FPathListA.SetNewSize(5)时,就会自动触发HandleListChanged方法。
内容的提问来源于stack exchange,提问作者johnwargo
相关产品推荐
相关产品推荐

