一个关于窗体调用的问题,有解吗?(20分)

  • 主题发起人 主题发起人 mo
  • 开始时间 开始时间
M

mo

Unregistered / Unconfirmed
GUEST, unregistred user!
以下共有三个窗体:MainForm(MDI窗体),PmbhForm(屏幕保护窗体),PmbhpassForm密码对话窗体

MDI主窗体中的代码:
procedure TMainForm.pbClick(Sender: TObject);
begin
; PmbhForm:=TPmbhForm.create(Application);
; PmbhForm.show;
end;

屏幕保护窗体中的代码:
procedure TPmbhForm.FormKeyDown(Sender: TObject; var Key: Word;
; Shift: TShiftState);
begin
; PmbhForm.close;
; PmbhForm.free;
; showmessage('s1');
; PmbhpassForm:=TPmbhpassForm.create(Application);
; showmessage('s2');
; PmbhpassForm.showmodal;
; showmessage('s3');
end;

密码对话窗体中的代码:
procedure TPmbhpassForm.NOBtnClick(Sender: TObject);
begin
; PmbhpassForm.close;
; PmbhpassForm.free;
; showmessage('n1');
; PmbhForm:=TPmbhForm.create(Application);
; showmessage('n2');
; PmbhForm.show;
; showmessage('n3');
end;

procedure TPmbhpassForm.OKBtnClick(Sender: TObject);
begin
; PmbhpassForm.close;
; showmessage('y1');
; PmbhpassForm.free;
; showmessage('y2');
; mainform.setfocus;
; showmessage('y3');
end;

问题:1:运行“showmessage('y3');“之后出错,提示为:
; ; ; ; ;'Access violation at address 00C5066C,Read of address FFFFFFFF'
; ; ; 2:运行“showmessage('y3');“之后出错,提示为:
; ; ; ; ;'Access violation at address 00402EAE in module 'xsgl.exe' ,Read of address EFBB6623'

DFW们,这怎么解决?(就这么多分了,请关照下贫困线下的新手吧,若分不够可以后再补的)
 
procedure TMainForm.pbClick(Sender: TObject);
begin
; PmbhForm:=TPmbhForm.create(Application);
; PmbhForm.show;
end;

屏幕保护窗体中的代码:
procedure TPmbhForm.FormKeyDown(Sender: TObject; var Key: Word;
; Shift: TShiftState);
begin
; PmbhForm.close;
; PmbhForm.free;///////////?????????????????????????????????????????????????????
; showmessage('s1');
; PmbhpassForm:=TPmbhpassForm.create(Application);
; showmessage('s2');
; PmbhpassForm.showmodal;
; showmessage('s3');
end;

密码对话窗体中的代码:
procedure TPmbhpassForm.NOBtnClick(Sender: TObject);
begin
; PmbhpassForm.close;
; PmbhpassForm.free;////////////////////???????????????????????????????????????
; showmessage('n1');
; PmbhForm:=TPmbhForm.create(Application);
; showmessage('n2');
; PmbhForm.show;
; showmessage('n3');
end;

procedure TPmbhpassForm.OKBtnClick(Sender: TObject);
begin
; PmbhpassForm.close;
; showmessage('y1');
; PmbhpassForm.free;///////////?????????????????????????????
; showmessage('y2');
; mainform.setfocus;////////////////////////????????????????????????????
; showmessage('y3');
end;

问题:1:运行“showmessage('y3');“之后出错,提示为:
; ; ; ; ;'Access violation at address 00C5066C,Read of address FFFFFFFF'
; ; ; 2:运行“showmessage('y3');“之后出错,提示为:
; ; ; ; ;'Access violation at address 00402EAE in module 'xsgl.exe' ,Read of address EFBB6623'

DFW们,这怎么解决?(就这么多分了,请关照下贫困线下的新手吧,若分不够可以后再补的)
 
在类的方法内不要free自己,真的要释放自己,也要用release代替free
 
TO:hfghfghfg
; ;把你注///??? 的代码去掉以后解决了问题了;唉,还我的基本功不行
; ;不过有点不明白的是:PmbhpassForm.close;它在内存还是存在的啊,
;若再PmbhpassForm:=TPmbhpassForm.create(Application);不就在内存重复了PmbhpassForm?
我之前也是没用过PmbhpassForm.free、PmbhForm.free的,但出现问题了,为此我就加了它们了
不过我之前好像没用PmbhpassForm:=TPmbhpassForm.create(Application);
;
;
 
我上面不是说了吗:在类的方法内不要free自己,真的要释放自己,也要用release代替free
就是把Free改成Release啊,你试试
 
TO:Pipi.
; ;把Free改成Release真的OK了
 
接受答案了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
555
import
I
后退
顶部