gpt4 book ai didi

delphi - 如何引用名称在运行时确定的控件?

转载 作者:行者123 更新时间:2023-12-03 14:39:31 25 4
gpt4 key购买 nike

作为一种自学练习,我制作了一个表单,其中包含 2x3 矩形中的六个面板,我希望它们在可见和不可见之间依次切换。我试图通过使用某种 for 循环来做到这一点。我当然可以写这样的东西:

Panel1.Visible := true;
Panel1.Visible := false;
Panel2.Visible := true;
Panel2.Visible := false;
Panel3.Visible := true;
etc. etc.

但是,当我决定希望它在每个步骤之间等待 100 毫秒时,这需要大量输入,并且效率非常低。例如,我必须编辑所有六个步骤才能等待。这六个步骤是可行的,但也许下次我想这样做一百次!所以我认为还必须有一种方法来使用 for 循环,其中变量从 1 到 6 变化,并在对象标识符中使用。所以它会是这样的:

for variable := 1 to 6 do begin
Panel + variable.Visible := true;
Panel + variable.Visible := false;
end;

现在,这显然行不通,但我希望这里有人能告诉我这是否实际上可能,如果可能,如何实现。也许我可以使用字符串作为标识符?我的解释可能很糟糕,因为我不知道所有的技术术语,但我希望代码能解释一些东西。

最佳答案

您可以循环访问面板的 Owner 的 Components 数组。

var
i: Integer;
TmpPanel: TPanel;
begin
{ This example loops through all of the components on the form, and toggles the
Visible property of each panel to the value that is opposite of what it has (IOW,
if it's True it's switched to False, if it's False it's switched to True). }
for i := 0 to ComponentCount - 1 do
if Components[i] is TPanel then
begin
TmpPanel := TPanel(Components[i]);
TmpPanel.Visible := not TmpPanel.Visible; // Toggles between true and false
end;
end;

如果您想要按名称查找非常特定类型的组件,还可以使用 FindComponent 方法。例如,如果您有 6 个面板,它们的名称为 Panel1Panel2 等:

var
i: Integer;
TmpPanel: TPanel;
begin
for i := 1 to 6 do
begin
TmpPanel := FindComponent('Panel' + IntToStr(i)) as TPanel;
if TmpPanel <> nil then // We found it
TmpPanel.Visible := not TmpPanel.Visible;
end;
end;

关于delphi - 如何引用名称在运行时确定的控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com