D
dirk
Unregistered / Unconfirmed
GUEST, unregistred user!
提个问题,调用Form的Free方法去卸载一个窗体,窗体的 OnDestroy 事件是否是最后一个发生的事件?如果窗体中其他控件上有事件处理呢?TListView控件是否比较特别?(100分)<br />以前我一直以为Form的 OnDestroy 事件是在卸载了窗体上的所有控件后,才触发的(不知
对否?),所以,书上都说,要在 OnDestroy 事件中释放一些资源,我也正是这么做的,
但现在我的程序却莫名其妙的出错,查了半天,发现,居然有些控件的事件会在Form的
OnDestroy事件之后触发,我有点糊涂了,请哪位高手帮我解释一下,代码请参考:
项目中放置Form1和Form2,其中Form1中放置一个按钮,在OnClick事件中写:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(self);
Form2.ShowModal ;
ShowMessage('aaa');
Form2.Free ;
end;
Form2中放置一个ListView1,上面随便加两个ListItem,并在ListView1的OnChange事件中写下
procedure TForm2.ListView1Change(Sender: TObject; Item: TListItem;
Change: TItemChange);
begin
ShowMessage('LV Change');
end;
在Form2的OnDestroy事件中写:
procedure TForm2.FormDestroy(Sender: TObject);
begin
ShowMessage('Form Destroy');
end;
运行,单击Form1上的按钮,显示Form2,选中ListView1上的一个ListItem,再关闭Form2,
好了,你会发现MessageBox的出现顺序是:
'aaa'
'Form Destroy'
'LV Change'
TListView的OnChange事件在Form的OnDestory事件之后发生,所以,如果你在FormDestory
事件中释放了TListView的OnChange事件中要使用的资源,就等着程序出错吧!
好像就TListView是这样,我用TTreeview试验,没有此现象。
对否?),所以,书上都说,要在 OnDestroy 事件中释放一些资源,我也正是这么做的,
但现在我的程序却莫名其妙的出错,查了半天,发现,居然有些控件的事件会在Form的
OnDestroy事件之后触发,我有点糊涂了,请哪位高手帮我解释一下,代码请参考:
项目中放置Form1和Form2,其中Form1中放置一个按钮,在OnClick事件中写:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(self);
Form2.ShowModal ;
ShowMessage('aaa');
Form2.Free ;
end;
Form2中放置一个ListView1,上面随便加两个ListItem,并在ListView1的OnChange事件中写下
procedure TForm2.ListView1Change(Sender: TObject; Item: TListItem;
Change: TItemChange);
begin
ShowMessage('LV Change');
end;
在Form2的OnDestroy事件中写:
procedure TForm2.FormDestroy(Sender: TObject);
begin
ShowMessage('Form Destroy');
end;
运行,单击Form1上的按钮,显示Form2,选中ListView1上的一个ListItem,再关闭Form2,
好了,你会发现MessageBox的出现顺序是:
'aaa'
'Form Destroy'
'LV Change'
TListView的OnChange事件在Form的OnDestory事件之后发生,所以,如果你在FormDestory
事件中释放了TListView的OnChange事件中要使用的资源,就等着程序出错吧!
好像就TListView是这样,我用TTreeview试验,没有此现象。