[回调函数]一个奇怪的回调问题,懂的人进 ( 积分: 200 )

  • 主题发起人 主题发起人 ksgameboy
  • 开始时间 开始时间
K

ksgameboy

Unregistered / Unconfirmed
GUEST, unregistred user!
设:FormA,FormB:TForm,类:clsA:ClassA
clsA注册了一个事件做为回调,如:TNodifyX = procedure(aa:integer); of object;
FormA有个函数:procedure NodifyX(aa:integer);
FormA创建clsA,并且把NodifyX函数指向给clsA的TNodifyX事件.
clsA经过处理后,回调NodifyX事件
FormA处理此过程.在过程中创建FormB.之后退出程序则报System Error 1400;
经过反复测试.发现是创建FormB,操作FormA上面的控件时会报此错误.那么如何使clsA回调到FormA时让FormA创建FormB并不报此错误.或者还是回调函数的应用不正确?
 
等待回复中...
 
说得不明确,不过估计还是你的回调函数有问题
 
在这个测试里回调仅仅是通知外界窗体做动作.
而通知完后,回调完毕后对资源的释放控制的也很好.难道创建FromB完后,释放掉回调者(clsA)会对FormB有映象?
 
//===================UNIT 1 FORM A
...
TFormA = class(TForm)
BitBtn1: TBitBtn;
Edit3: TEdit;
private
procedure OnCallback(integer:Integer);
end;
...
procedure TFormA.OnCallback(integer: Integer);
begin
button1.click;//...//控件操作
FormB := TFormB.Create(Self);
FormB.show;
end;

procedure TFormA.FormCreate(Sender: TObject);
begin
clsA := TClsA.create;
clsA.NodifyX := OnCallback;
end;
...
//===================UNIT 2 FORM B

//===================UNIT 2 CLASS A
TNodifyX = procedure(index:integer) of object;
clsA = class
private
FNodifyX : TNodifyX;
procedure doaaa;
public
property NodifyX : TNodifyX read FNodifyX Write FNodifyX;
end;
...
procedure clsA.doaaa;
begin
FNodifyX(1);//数值1
end;
 
1:FormB.show;不会出现窗体FormB
2:退出程序提示:System Error 1400
窗体闪了一下,可能是创建FormB,之后一下子就"可能"被FREE掉了
 
既然没人懂.我现在用了消息解决此问题.
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
后退
顶部