Delphi 如何在TTabcontrol中隐藏多个选项卡

Delphi 如何在TTabcontrol中隐藏多个选项卡,delphi,delphi-10.2-tokyo,Delphi,Delphi 10.2 Tokyo,我的程序有三个下拉列表和一个ttabcontrol,其中有5个选项卡。我需要知道的是,如果下拉菜单选择了某个特定项目,如何隐藏所有选项卡并重新设置其可见性。 例如 我的下拉列表具有的索引项。 A,B,C,A+B,A+C TabControl具有以下选项卡。 A、B、C 现在我需要隐藏所有选项卡,如果下拉菜单选择了A,则取消隐藏选项卡A;如果下拉菜单选择了A+b,则取消隐藏A&b。使用可枚举类型来完成此操作。您可以非常轻松地探索布尔运算 TYPE TabControlTag = (A, B, C)

我的程序有三个下拉列表和一个ttabcontrol,其中有5个选项卡。我需要知道的是,如果下拉菜单选择了某个特定项目,如何隐藏所有选项卡并重新设置其可见性。 例如 我的下拉列表具有的索引项。 A,B,C,A+B,A+C TabControl具有以下选项卡。 A、B、C
现在我需要隐藏所有选项卡,如果下拉菜单选择了A,则取消隐藏选项卡A;如果下拉菜单选择了A+b,则取消隐藏A&b。

使用可枚举类型来完成此操作。您可以非常轻松地探索布尔运算

TYPE
TabControlTag = (A, B, C);
TabTags = set of TabControlTag;
TForm1=class(TForm)
...
实施

procedure TForm1.HideTabControl(Sender: TObject);
{hide all tabItem in tabControl}
var
   i: integer;
begin
   for i := 0 to TabControl1.ComponentCount - 1 do
      if TabControl1.Components[i] is TTabItem then
         with TabControl1.Components[i] do
         begin
            visible := false;
         end;
end;
如果使用TCombobox作为下拉列表,请使用OnChange事件

非常灵活和可扩展的解决方案

例如,使用TCheckbox


其他两个下拉列表在做什么?与B CMy建议做的相同的事情是首先使用条件语句使其工作。例如,如果。之后,您可能会考虑如何更有效地进行操作。如果COMBOBO.ITEMCREATE=1,那么开始TabItEM1.Fielt:= TRUE;end else begin Tabitem1.enabled:=flase;使用1个标签隐藏和dishidng可以很好地工作,但是当我必须同时看到两个标签时,就像a+b案例一样,它不起作用。在这种情况下该怎么办?您使用VCL还是FMX?在FMX中,TTabItem具有可见属性。但在VCL中,TTabControl不允许隐藏/显示选项卡,您必须从tabs属性中物理删除它们,然后重新添加它们,因此,我建议使用TPageControl而不是TTabControl,以便您可以根据需要设置各个页面的TTabSheet.TabVisible属性。要了解更多有关可枚举逻辑读取的信息,以及如果选择了选项卡A+B或B+C,则如何使两个选项卡同时可见?这将很好!它已在上述程序中实施!只需在combobox中添加新的项目和所需的组合,并在“Case of”结构中添加对该索引的引用,但这就是我建议您使用“TCheckBox”或“TCheckBoxList”的原因,然后使用所有可能的组合
procedure TForm1.ComboBox1Change(Sender: TObject);
var
   Tabs: TabTags;
begin
   case ComboBox1.ItemIndex of
      0: { A } Tabs := [A];
      1: { B } Tabs := [B];
      2: { C } Tabs := [C];
      3: { A+B } Tabs := [A,B];
      4: { A+C } Tabs := [A,C];
   end;
   if A in Tabs then  tabItem1.Visible:=true;
   if B in Tabs then  tabItem2.Visible:=true;
   if C in Tabs then  tabItem3.Visible:=true;
end;
var
   Tabs: TabTags;
begin
tabs:=[];
If checkBoxA.IsChecked then TabTags:= [A];
If checkBoxB.IsChecked then TabTags:= TabTags + [B];//OR boolean operations. Also allowed [A,B] * [A] which means AND, [A,B] - [A] which means NOR,
If checkBoxC.IsChecked then Include(TabTags,C)
if A in Tabs then  tabItem1.Visible:=true;
if B in Tabs then  tabItem2.Visible:=true;
if C in Tabs then  tabItem3.Visible:=true;
end