pagecontrol释放的问题(100分)

  • 主题发起人 主题发起人 Geminiyc
  • 开始时间 开始时间
G

Geminiyc

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么pagecontrol在释放的时候会执行其某些tabsheet页面的onshow事件了?
程序——
2个form,分别包含一个panel1,form2的panel内有一个pagecontrol1,pagecontrol内有3个页面。
form1里面有2个按钮,事件分别如下——
procedure TForm1.Button1Click(Sender: TObject);
begin
if form2=nil then
form2:=Tform2.Create(nil);
form2.panel1.Parent := panel1;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form2.Free;
form2:=nil;
end;

为什么在点击TForm1.Button2 时会执行pagecontrol中某些页面的tabsheet.onshow事件?
 
沙发...顶下..
 
我又检查了一下,发现pagecontrol在释放的时候会自动先回到tabsheet1,而无论它先前在tabsheet几,所以tabsheet1的show事件是必须执行了。
于是问题出来了,假设tabsheet1.onshow里面有“异常”的或不想再执行的代码……
我是这样解决的:在tabsheet1.onshow的第一句加了一个test变量,来判断是否执行后面的代码。
test在form创建的时候赋值true,destory的时候赋值false。
但总觉得还是太麻烦了。有好的建议么?
 
怎么没有人搭理啊 :(
 
在pagecontrol有个OnChanging的事件,如果其中的参数AllowChange := False;则不可以去切换Page的,你试试这个设置一下看看呢。
 
pagecontrol1在释放的时候?
指什么时候?
 
to lngdtommy:
你的方法和我相似吧,都是自己增设了一个变量来判断。
to 加油+加油:
pagecontrol1在释放的时候,就是值其所在form执行free,当摧毁到pagecontrol1控件的时候
 
有人回答吗?
 
procedure TForm1.Button2Click(Sender: TObject);
begin
//先把tabsheet的showing设置为false即可或隐藏即可
form2.Free;
form2:=nil;
end;
 
hanpengshan_00的方法有效,我在form2的destory事件里面加了如下语句。
tabsheet1.tabVisible:=false;
tabsheet2.tabVisible:=false;
 
接受答案了.
 

Similar threads

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