冥界3大法王 发表于 2023-11-19 22:06

关于在未知数量的情况下动态创建控件的困惑



比如以下delphi代码:

https://static.52pojie.cn/static/image/hrline/2.gif


procedure TMain_Form.动创3个ComboBoxClick(Sender: TObject);
var
ComboBox1, ComboBox2, ComboBox3: TComboBox;
begin
ComboBox1 := TComboBox.Create(DTSC_Panel);
ComboBox1.Parent := DTSC_Panel;
ComboBox1.Left := 500;
ComboBox1.Top := 10;

ComboBox2 := TComboBox.Create(DTSC_Panel);
ComboBox2.Parent := DTSC_Panel;
ComboBox2.Left := 500;
ComboBox2.Top := 80;

ComboBox3 := TComboBox.Create(DTSC_Panel);
ComboBox3.Parent := DTSC_Panel;
ComboBox3.Left := 500;
ComboBox3.Top := 150;
end;


问题是我不知道ComboBox到底是几个?数量是(动态的不确定的)跟随机很像
ComboBox 加 序号 ,这咋表达?

冥界3大法王 发表于 2023-11-19 22:37

以下没报错,咋显示了一个呢?

unit Unit7;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus,
Vcl.StdCtrls;

type
TForm7 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

private
    { Private declarations }
public
    { Public declarations }
end;

var
Form7: TForm7;
A1: Integer;

implementation

{$R *.dfm}

procedure TForm7.FormCreate(Sender: TObject);
begin
Randomize; //初始化随机数发生器
A1 := Random(5);
end;

procedure TForm7.Button1Click(Sender: TObject);
var
i: Integer;
num: array of TComboBox;
begin
for i := 1 to A1 do
begin
    num := TComboBox.Create(Form7);
    num.Parent := Form7;
    num.Left := 10 + 100;
    num.Top := 10 + 50;
end;
end;

end.

lies2014 发表于 2023-11-19 22:49

冥界3大法王 发表于 2023-11-19 22:37
以下没报错,咋显示了一个呢?

unit Unit7;


只显一个是因为都重叠在一起了:
    num.Left := 10 + 100;
    num.Top := 10 + 50;

DEATHTOUCH 发表于 2023-11-20 00:09

每一个TComponent类都有一个Components属性,表示该组件作为容器时拥有对象所有权的子控件列表。
可以在动态创建控件时为其生成一个独一无二的Name属性,或者一个Tag属性来区分它们,而查找一类控件通常需要利用TObject的ClassName属性来区分。
由于Name属性对于任意类型组件都是唯一的,而某种类型的组件用ClassName和Tag来区分是更合适的。
页: [1]
查看完整版本: 关于在未知数量的情况下动态创建控件的困惑