在PageControl上使用TabSheets并控制其可见性时,我已经克服了一些奇怪的行为。对于一个简单的示例,在窗体上添加一个PageControl,向该PageControl添加两个TabSheets,向每个TabSheet添加一个Label,然后分配Forms OnCreate事件。
OnCreate的代码如下:
procedure TForm1.FormCreate(Sender: TObject);
function Cond1: Boolean;
begin
result := 1=1;
end;
function Cond2: Boolean;
begin
result := 2=2;
end;
begin
TabSheet1.Visible := Cond1;
TabSheet1.TabVisible := Cond1;
if not (Cond1) then
if PageControl1.ActivePage = TabSheet1 then
PageControl1.ActivePage := TabSheet2;
TabSheet2.Visible := Cond2;
TabSheet2.TabVisible := Cond2;
if not(Cond2) then
if PageControl1.ActivePage = TabSheet2 then
PageControl1.ActivePage := nil;
ShowMessage(IntToStr(PageControl1.ActivePageIndex));
//PageControl1.ActivePage.BringToFront; //uncomment to work properly
end;
如您所见,“活动”页面仍然是TabSheet1,但是显示了TabSheet2的内容。使用BringToFront,一切都可以按预期工作,但这对我来说似乎很奇怪。
是否有更好的方法来控制这些可见性,也许为此使用PageControl?
PS:我使用的是VCL,而不是Firemonkey
删除TabSheet1.Visible
和TabSheet2.Visible
的分配,这些分配会破坏标签的可见性。
begin
// TabSheet1.Visible := Cond1;
TabSheet1.TabVisible := Cond1;
if not (Cond1) then
if PageControl1.ActivePage = TabSheet1 then
PageControl1.ActivePage := TabSheet2;
// TabSheet2.Visible := Cond2;
TabSheet2.TabVisible := Cond2;
if not(Cond2) then
if PageControl1.ActivePage = TabSheet2 then
PageControl1.ActivePage := nil;
ShowMessage(IntToStr(PageControl1.ActivePageIndex));
end;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句