Delphi 带有 TabSheet invisibleTabVisible 的 PageControl := False;

Delphi PageControl with TabSheet invisibleTabVisible := False;

我有一个带有 PageControl 和 7 个选项卡的表单。 我只想看到一些标签。一侧是选项卡 0、1、2、3、4 和 5,另一侧只有选项卡 6 和 7。我依次渲染为不可见。 我有一个 DBNavigator,它在 DBNavigatorClik 过程中更改数据源以控制所用选项卡上的网格等。

以 2 个选项卡为例

procedure TF_DatenErfassung.PageControl1Change(Sender: TObject);
 begin
  with (Sender as TPageControl) do
   case PageControl1.Tabindex of
  0:begin 
    DBNavigator1.DataSource:=F_ModuleTables.DS_MieteBezahlung;
   end;                                                                                                                 
  1:begin 
    DBNavigator1.DataSource:=F_ModuleTables.DS_T_JaresAbrechnung_Mieter;      
   end;
 end;{case}
end; 

在我的 FormActivate 过程中 此代码:

if ModuleTables.T_TABLE.FieldByName('NrDossier').AsString[1]<>'X' then

{A}  begin
      PageControl1.Pages[0].TabVisible:=false;
      PageControl1.Pages[1].TabVisible:=true; {I want to work only on this Tab}
     end
    else
{B}  begin
      PageControl1.Pages[0].TabVisible:=true; {I want to work only on this Tab}
      PageControl1.Pages[1].TabVisible:=false;
    end;

当我在表单 PageControl 的 {A} 上时,选项卡 1 显然是第一个(在这种情况下是唯一的)选项卡 0 不可见,只有选项卡 1 可见。但对于 pageControl 来说,这似乎是 Tab 0 而不是 1 它只是更改了 Tab 索引;有办法绕过去吗?我试着输入一个

 PageControl1.ActivePageIndex:=1;

但它不在乎。在我看来,Tab 索引实际上是在创建页面时创建的,这不会造成问题,但在我的情况下它会造成问题。 有没有办法绕过它而无需重新创建所有“轮子”。

您需要区分 TabsPages选项卡 是可见页面的选项卡。因此,如果只有一个选项卡可见,则 tab/page 始终 TabIndex = 0.

PageControl1Change 中的 case 语句应该作用于 PageControl1.ActivePageIndex 而不是 PageControl1.TabIndex