如何启用多个位按钮?

How to enable multiple bitbuttons?

我想知道如何通过代码启用 10 个位按钮,每个位按钮都没有 `bitbtn1.enable := true'。

我试过了,但没用:

for a:= 1 to 10 do
  begin
   bitbtn+inttostr(a).enabled:=true; 

   end;

我该如何解决这个问题,或者有其他方法吗?

谢谢

有很多选择。

如果所有的按钮都有相同的parent控件,而你想调整所有TBitBtnchild这个[=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。因为它会更快更简单。