我正在开发DataAware组件,并在数据库打开后执行一些代码。Delphi中的组件事件检测
这是我此刻的代码:
TMyDataAwareComponent = class(TDataAwareComponent)
private
{ Private declarations }
procedure ToBeExecutedOnAfterOpen(DataSet: TDataSet);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
end;
constructor TMyDataAwareComponent.Create(AOwner: TComponent);
begin
inherited;
if Assigned(Self.DataSource) then
begin
Self.DataSource.DataSet.AfterOpen := ToBeExecutedOnAfterOpen;
end;
end;
procedure TMyDataAwareComponent.ToBeExecutedOnAfterOpen(DataSet: TDataSet);
var
i: Integer;
begin
// Do something here
end;
代码工作正常,但连接到组件的数据集的事件AfterOpen不会触发任何更长的时间。 如何确保AfterOpen事件先在数据集中触发,然后在组件中触发?
是否有解决方案适用于数据集中的所有事件(BeforeOpen,AfterOpen,BeforeCancel,BeforeDelete,AfterCancel,AfterDelete等...)?
*代码工作正常,但连接到组件的数据集的事件AfterOpen不会触发任何更长的时间。*你被劫持了! –
编写数据感知组件是指Delphi作者已经完成的组件。对于单字段编辑器,请查看“TDBEdit”及其“FDataLink”字段;对于类网格组件,也可以查看“TDBGrid”及其“FDataLink”字段。 – Abelisto
您需要检查Self.DataSource.DataSet是否也分配了fwiw。 – MartynA