如何在 TTabcontrol 中隐藏多个选项卡
How to hide multiple tabs in TTabcontrol
我的程序有三个下拉菜单和一个 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
事件
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;
一个非常灵活和可扩展的解决方案。
例如,使用TCheckbox
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
我的程序有三个下拉菜单和一个 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
事件
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;
一个非常灵活和可扩展的解决方案。
例如,使用TCheckbox
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