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)
我该如何解决这个问题,或者还有其他方法吗?
谢谢
有很多选择。
如果按钮都具有相同的父控件,并且您想要调整此父控件的所有 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)