如何启用多个位按钮?

Fuz*_*ail 1 delphi delphi-2010 delphi-xe2

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

我试过这个,但它不起作用:

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

   end;
Run Code Online (Sandbox Code Playgroud)

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

谢谢

And*_*and 5

有很多选择。

如果按钮都具有相同的父控件,并且您想要调整此父控件的所有 TBitBtn子控件,则可以简单地遍历父控件的子控件:

var
  i: Integer;
begin

  for i := 0 to ControlCount - 1 do
    if Controls[i] is TBitBtn then
      TBitBtn(Controls[i]).Enabled := True;
Run Code Online (Sandbox Code Playgroud)

(在这种情况下,父级Self假设它存在。例如,这可能是表单类中的一个方法。明确地说,这是

  for i := 0 to Self.ControlCount - 1 do
    if Self.Controls[i] is TBitBtn then
      TBitBtn(Self.Controls[i]).Enabled := True;
Run Code Online (Sandbox Code Playgroud)

如果父母是Panel1,你做

  for i := 0 to Panel1.ControlCount - 1 do
    if Panel1.Controls[i] is TBitBtn then
      TBitBtn(Panel1.Controls[i]).Enabled := True;
Run Code Online (Sandbox Code Playgroud)

)

如果您只想调整其中的一些,您可以例如给它们一个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;
Run Code Online (Sandbox Code Playgroud)

如果它们不都具有相同的父级,则稍微有点棘手。一种选择是在应用程序启动时使用所有按钮创建一个数组(例如表单类的私有字段):

private
  FButtons: TArray<TBitBtn>;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  FButtons := [BitBtn1, BitBtn2, BitBtn3];
end;
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地迭代这个:

var
  Btn: TBitBtn;
begin
  for Btn in FButtons do
    Btn.Enabled := True;
Run Code Online (Sandbox Code Playgroud)