gpt4 book ai didi

delphi - 如何创建控件数组?

转载 作者:行者123 更新时间:2023-12-03 18:04:05 24 4
gpt4 key购买 nike

我必须创建一个数组并将所有控件放在那里以便访问它们。这是一个简短的示例:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
const Test:Array[0..2] of TButton = (Button1,Button2,Button3);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

end.

在我声明数组的那一行未声明标识符“Button1”。但它在上面三行声明。

问题出在哪里,如何将所有控件放在一个数组中?

编辑:

感谢您的回答,但我遇到了问题:

 var TestA:TObjectList<TButton>;

var index:TComponent;
begin
TestA := TObjectList<TButton>.Create(false);
for index in Form7 do
if pos(index.name, 'Button') = 1 then
TestA.add(TButton(index));

TestA[0].Caption := 'Test'; //Exception out of range.

最佳答案

本是对的。您不能在窗体设计器中设置控件数组。但是,如果您有 110 张图像,对于这种特定情况,您可以将它们放入 TImageList 组件并将其图像集合视为一个数组。

如果您有一堆更普通的控件,例如按钮,则必须创建一个数组并用代码将它们加载到其中。有两种方法可以做到这一点。 Ben 的回答是简单的方法,至少对于小型阵列而言。对于大型控件集,或者经常更改的控件集(例如,您的设计尚未完成),只要确保为它们提供所有序列名(Button1、Button2、Button3...),您就可以尝试一些像这样:

var
index: TComponent;
list: TObjectList;
begin
list := TObjectList.Create(false); //DO NOT take ownership
for index in frmMyForm do
if pos('Button', index.name) = 1 then
list.add(index);
//do more stuff once the list is built
end;

(使用 TObjectList<TComponent> ,或者更具体的东西,如果你使用的是 D2009。)根据上面的代码构建列表,然后编写一个排序函数回调,根据名称对它们进行排序并使用它对列表进行排序,您就得到了“数组”。

关于delphi - 如何创建控件数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1218041/

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