自定义form类,覆盖了用户控件ADODtaset的AfterInsert时间,无法执行定义在控件中的代码(100)

  • 主题发起人 主题发起人 jin_sue
  • 开始时间 开始时间
J

jin_sue

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个form类,所有的用户界面都继承这个类,在这个类中定义了通用的AfterInsert过程,然后在创建Form时替换掉所有TADODataset的AfterInsert事件,在用户界面中再在afterInsert事件中定义其他的代码,发现这些代码无法执行。有什么办法吗?
 
定义一个结构体数组,结构体类型为_RDataSetEvent=record DataSet:TDataSet
AfterInsert:类型忘记怎么写end;在Create时,如果DataSet已经存在AfterInsert,则在该数组中,将AfterInsert事件指针保存下来。在你的AfterInsert执行后,再去这个数组查看远行是否定义了事件,如果存在,则调用原先的事件
 
能不能说的更详细一点?如何判断这个DataSet已经定义了AfterInsert事件?如果有,怎么执行完公有的代码后,再执行界面中定义的代码
 
看完下面代码,请记得给分哦。===============unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBClient;type _RDataSetEvent = record DataSet: TDataSet
AfterInsert:TDataSetNotifyEvent
end
ArrEvent=Array of _RDataSetEvent
TForm1 = class(TForm) procedure FormCreate(Sender: TObject)
private FEvent:ArrEvent
procedure DoOldAfterInsert(DataSet: TDataSet)
procedure MyAfterInsert(DataSet: TDataSet)
public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DoOldAfterInsert(DataSet: TDataSet);var I:Integer;begin for I:=Low(FEvent) to High(FEvent) do if FEvent.DataSet=DataSet then begin FEvent.AfterInsert(DataSet)
Break
end;end;procedure TForm1.FormCreate(Sender: TObject);var I,H:Integer;begin For I:=0 to Self.ComponentCount-1 do begin if not (Self.Components Is TDataSet) then Continue
if not Assigned( TDataSet(Self.Components).AfterInsert) then Continue
SetLength(FEvent,Length(FEvent)+1)
H:=High(FEvent)
//保存原先事件 FEvent[H].DataSet:= TDataSet(Self.Components)
FEvent[H].AfterInsert := TDataSet(Self.Components).AfterInsert
//更改事件为当前单元中定义的事件 TDataSet(Self.Components).AfterInsert := MyAfterInsert
end;end;procedure TForm1.MyAfterInsert(DataSet: TDataSet);begin ...你的代码... DoOldAfterInsert(DataSet)
//执行原先的AdterInsert事件end;end.
 
后退
顶部