关于PageControl的问题

changfenglee 2012-08-20 01:35:39
各位前辈:
小弟在使用PageControl时碰到个问题,试了很久也不知道怎么回事,请帮忙看看,先谢过了,下面是代码:
procedure TMainForm.N16Click(Sender: TObject);
var
i:Integer;
TabSheet:TRzTabSheet;
begin
for i:=0 to RzPageControl1.PageCount-1 do
begin
if RzPageControl1.Pages[i].Caption = '设备清单' then
begin
RzPageControl1.ActivePageIndex:=i;
end
else
begin
TabSheet:=TRzTabSheet.Create(Self);
TabSheet.PageControl:=RzPageControl1;
TabSheet.Caption:='设备清单';

DeviceForm:=TDeviceForm.Create(Application);
DeviceForm.ParentWindow:=TabSheet.Handle;
DeviceForm.BorderStyle:=bsNone;
DeviceForm.Align:=alClient;
RzPageControl1.ActivePage:=TabSheet;

end;
end;
end;

上面这段代码发生的问题是:每次点都会新建一个TabSheet和窗体,本来目的是对已经打开的就不要新建了,直接显示就可以,但是上面的代码却不能实施,摸索了很久也不知道为什么,请各位大大指点下吧
...全文
133 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
changfenglee 2012-08-20
  • 打赏
  • 举报
回复
非常感谢各位的帮忙!问题解决了,如上所述能实现.再次感谢!
haitao 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

Delphi(Pascal) code
[Quote=引用 3 楼 的回复:]

if条件满足时,for循环未退出break;
[/Quote]

哦,对,逻辑不是这样写的,应该:
for i:=0 to RzPageControl1.PageCount-1 do
begin
if RzPageControl1.Pages[i].Caption = '设备清单' then
b……
[/Quote]

还少屏蔽一对begin.end,应该:
for i:=0 to RzPageControl1.PageCount-1 do
//begin
if RzPageControl1.Pages[i].Caption = '设备清单' then
begin
RzPageControl1.ActivePageIndex:=i;
exit;
end;

// else
begin
TabSheet:=TRzTabSheet.Create(Self);
TabSheet.PageControl:=RzPageControl1;
TabSheet.Caption:='设备清单';

DeviceForm:=TDeviceForm.Create(Application);
DeviceForm.ParentWindow:=TabSheet.Handle;
DeviceForm.BorderStyle:=bsNone;
DeviceForm.Align:=alClient;
RzPageControl1.ActivePage:=TabSheet;

end;
//end;
shuihan20e 2012-08-20
  • 打赏
  • 举报
回复
膜拜楼上大牛
山东蓝鸟贵薪 2012-08-20
  • 打赏
  • 举报
回复
信件已阅,
但是我只能将我自己处理的方法分享给你的

我的方法是先测试RzPageControl1中的TabSheet是否打开相关
的窗体(我是将窗体嵌入这个TabSheet中的),
如果打开,提示必须先关闭TabSheet中的窗体(声明窗体中有一个退出功能
并释放出TabSheet,以方便以后再次加载窗体的)

如果没有嵌入窗体的话,就直接加载相关窗体
如下图所示:
山东蓝鸟贵薪 2012-08-20
  • 打赏
  • 举报
回复
信件已阅,
但是我只能将我自己处理的方法分享给你的

我的方法是先测试RzPageControl1中的TabSheet是否打开相关
的窗体(我是将窗体嵌入这个TabSheet中的),
如果打开,提示必须先关闭TabSheet中的窗体(声明窗体中有一个退出功能
并释放出TabSheet,以方便以后再次加载窗体的)

如果没有嵌入窗体的话,就直接加载相关窗体
如下图所示:
haitao 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼  的回复:]

if条件满足时,for循环未退出break;
[/Quote]

哦,对,逻辑不是这样写的,应该:
for i:=0 to RzPageControl1.PageCount-1 do
begin
if RzPageControl1.Pages[i].Caption = '设备清单' then
begin
RzPageControl1.ActivePageIndex:=i;
exit;
end;

// else
begin
TabSheet:=TRzTabSheet.Create(Self);
TabSheet.PageControl:=RzPageControl1;
TabSheet.Caption:='设备清单';

DeviceForm:=TDeviceForm.Create(Application);
DeviceForm.ParentWindow:=TabSheet.Handle;
DeviceForm.BorderStyle:=bsNone;
DeviceForm.Align:=alClient;
RzPageControl1.ActivePage:=TabSheet;

end;
end;
kaikai_kk 2012-08-20
  • 打赏
  • 举报
回复
if条件满足时,for循环未退出break;
haitao 2012-08-20
  • 打赏
  • 举报
回复
还要增加:
TabSheet.visible:=true;
bdmh 2012-08-20
  • 打赏
  • 举报
回复
那就是你的问题了,自己断点,看看if语句是否被满足了,进不去,肯定就是没得到满足

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧