gpt4 book ai didi

delphi - TabSheet 可见的奇怪问题

转载 作者:行者123 更新时间:2023-12-01 19:41:04 25 4
gpt4 key购买 nike

在 PageControl 上使用 TabSheets 并控制其可见性时,我克服了一些奇怪的行为。举一个简单的示例,在 Form 上添加一个 PageControl,向该 PageControl 添加两个 TabSheet,向每个 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;

可以看到,Active页面仍然是TabSheet1,但是显示了TabSheet2的内容。使用 BringToFront,一切都按预期工作,但这对我来说似乎很奇怪。

是否有更好的方法来控制这些可见性,也许使用 PageControl 来实现?

PS:我使用的是 VCL,而不是 Firemonkey

最佳答案

删除对 TabSheet1.VisibleTabSheet2.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;

关于delphi - TabSheet 可见的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26711561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com