关于窗口调用问题!(50分)

M

mfkj

Unregistered / Unconfirmed
GUEST, unregistred user!
主窗口! ck1
子窗口! ck2
子窗口的子窗口! ck3
我在子窗口的子窗口中调用子窗口的控件代码应如何写!
例我在CK3中
procedure tck3.FormActivate(Sender: TObject);
begin

ck2.ADOQuery1.next;
end;

则会出错!
Access violation at address 00533EA6 in module 'ck.exe',read of address 0000354
Why???????????

 
因为ck2=nil
你应该先创建ck2,或者调用之前加if Assigned(ck2) then
判断
 
ck2是否已经创建?
还有use ck2
 
调用自窗口按钮代码:if not assigned(ck2) then
application.createform(tck2,ck2);
 
楼上所言极是!
 
两个窗体间最好不要相互引用.
ck2 use了 ck3.
ck3最好不use ck2
 
我也出过这样的问题,最后解决了,
我自己又Var xx:TxxForm;了。
直接USES单元就行的。
 
{应用程序全局变量}
frmModify:tfrmmodify;
frmBrowse:TFrmBrowse;

{窗体FrmBrowse的按钮事件,用于显示窗体FrmModify}
procedure tfrmBrowse.button1click(sender:tobject);
begin
if Assigned(FrmModify) then
FrmModify.Show
else
begin
FrmModify:=TFrmModify.Create(nil);
FrmModify.Show;
end;
end;

{窗体FrmModify的按钮事件,用于显示窗体FrmBrowse}
procedure tfrmModify.button1click(sender:tobject);
begin
if Assigned(FrmBrowse) then
FrmBrowse.Show
else
begin
FrmBrowse:=TFrmBrowse.Create(nil);
FrmBrowse.Show;
end;
end;

注意在每个窗体的destroy事件中加上 "窗体名:= nil;"
在窗体的Close事件中加入"Action := caFree;"
 
顶部