如何启用多个位按钮?
How to enable multiple bitbuttons?
我想知道如何通过代码启用 10 个位按钮,每个位按钮都没有 `bitbtn1.enable := true'。
我试过了,但没用:
for a:= 1 to 10 do
begin
bitbtn+inttostr(a).enabled:=true;
end;
我该如何解决这个问题,或者有其他方法吗?
谢谢
有很多选择。
如果所有的按钮都有相同的parent控件,而你想调整所有TBitBtn
child这个[=42]的控件=],您可以简单地遍历 parent 的 child 控件:
var
i: Integer;
begin
for i := 0 to ControlCount - 1 do
if Controls[i] is TBitBtn then
TBitBtn(Controls[i]).Enabled := True;
(在这种情况下,假设 parent 存在 Self
。例如,这可能是您表单 class 中的一个方法。明确地说,这是
for i := 0 to Self.ControlCount - 1 do
if Self.Controls[i] is TBitBtn then
TBitBtn(Self.Controls[i]).Enabled := True;
如果 parent 是 Panel1
,那么您
for i := 0 to Panel1.ControlCount - 1 do
if Panel1.Controls[i] is TBitBtn then
TBitBtn(Panel1.Controls[i]).Enabled := True;
)
如果你只想调整其中的一些,你可以给他们一个Tag = 1
来区别于其他位按钮:
var
i: Integer;
begin
for i := 0 to ControlCount - 1 do
if Controls[i] is TBitBtn then
if TBitBtn(Controls[i]).Tag = 1 then
TBitBtn(Controls[i]).Enabled := True;
如果他们的 parent 不完全相同,那就有点棘手了。一种选择是在应用程序启动时使用所有按钮创建一个数组(例如 class 形式的私有字段):
private
FButtons: TArray<TBitBtn>;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
FButtons := [BitBtn1, BitBtn2, BitBtn3];
end;
然后你可以简单地迭代这个:
var
Btn: TBitBtn;
begin
for Btn in FButtons do
Btn.Enabled := True;
你不能这样做 bitbtn+inttostr(a).enabled:=true
但你 可以 FindComponent('bitbtn'+inttostr(a)).enabled := true
.
尽管我确实建议您将它们全部放在一个面板中并设置 panel.enabled := true
。因为它会更快更简单。
我想知道如何通过代码启用 10 个位按钮,每个位按钮都没有 `bitbtn1.enable := true'。
我试过了,但没用:
for a:= 1 to 10 do
begin
bitbtn+inttostr(a).enabled:=true;
end;
我该如何解决这个问题,或者有其他方法吗?
谢谢
有很多选择。
如果所有的按钮都有相同的parent控件,而你想调整所有TBitBtn
child这个[=42]的控件=],您可以简单地遍历 parent 的 child 控件:
var
i: Integer;
begin
for i := 0 to ControlCount - 1 do
if Controls[i] is TBitBtn then
TBitBtn(Controls[i]).Enabled := True;
(在这种情况下,假设 parent 存在 Self
。例如,这可能是您表单 class 中的一个方法。明确地说,这是
for i := 0 to Self.ControlCount - 1 do
if Self.Controls[i] is TBitBtn then
TBitBtn(Self.Controls[i]).Enabled := True;
如果 parent 是 Panel1
,那么您
for i := 0 to Panel1.ControlCount - 1 do
if Panel1.Controls[i] is TBitBtn then
TBitBtn(Panel1.Controls[i]).Enabled := True;
)
如果你只想调整其中的一些,你可以给他们一个Tag = 1
来区别于其他位按钮:
var
i: Integer;
begin
for i := 0 to ControlCount - 1 do
if Controls[i] is TBitBtn then
if TBitBtn(Controls[i]).Tag = 1 then
TBitBtn(Controls[i]).Enabled := True;
如果他们的 parent 不完全相同,那就有点棘手了。一种选择是在应用程序启动时使用所有按钮创建一个数组(例如 class 形式的私有字段):
private
FButtons: TArray<TBitBtn>;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
FButtons := [BitBtn1, BitBtn2, BitBtn3];
end;
然后你可以简单地迭代这个:
var
Btn: TBitBtn;
begin
for Btn in FButtons do
Btn.Enabled := True;
你不能这样做 bitbtn+inttostr(a).enabled:=true
但你 可以 FindComponent('bitbtn'+inttostr(a)).enabled := true
.
尽管我确实建议您将它们全部放在一个面板中并设置 panel.enabled := true
。因为它会更快更简单。