delphi - 动态创建一个没有预先声明的变量限制的新组件?
问题描述
我正在做一个学校项目。我需要用户单击一个按钮,每次按下按钮时都会创建一个具有新名称的新组件。我的想法看起来像这样
procedure TForm1.btnClick (Sender: TObject);
Var
pnlTest1, pnlTest2 : TPanel;
Begin
If iCount = 1
then
Begin
pnlTest1 := TPanel.Create(Self);
pnlTest1.Parent := Self;
pnlTest.Top := 0;
Etc...
End
Else if iCount = 2
Then
Begin
PnlTest2 := TPanel.Create(Self);
PnlTest2.Parent := Self;
PnlTest2.Top := 0;
Etc...
End;
问题是我只能创建与创建变量一样多的组件,并且我需要用户创建基本上无限数量的新组件。我也尝试了其他方法,但出现了同样的问题,我还尝试使用指针等创建动态变量,但这些变量的数据类型仅(在我的努力中)与基本数据类型(整数、字符串等)一起工作,所以我无法在运行时创建变量来创建组件(在示例 pnlTest 中:声明了 TPanel,这不适用于动态变量)
请告知我如何在每次单击按钮时创建一个新组件而不受先前存在的变量的限制,或者请告知我如何每次都可以使用“无限”数量的变量来创建一个新组件。
解决方案
您只需要声明 1 个指针变量即可接收新的组件实例,例如:
private
iCount: Integer;
...
procedure TForm1.btnClick (Sender: TObject);
Var
pnlTest : TPanel;
Begin
pnlTest := TPanel.Create(Self);
pnlTest.Parent := Self;
pnlTest.Name := 'pnlTest' + IntToStr(iCount);
pnlTest.Top := 0;
//...
Inc(iCount);
End;
组件实例存储在 Form 的Components
和Controls
属性中,因为您将 Form 分别指定为组件的Owner
和Parent
。
推荐阅读
- java - Java - 使静态嵌套类对所有人可见,但仅由父类和父类的子类构造
- html - 电子书阅读器未捕获 epub 文件的嵌入字体
- android - 通过 1 Android Studio 更新 Firebase 中的数据字段
- c - Coverity 用于简单的 HalloWorld
- powerapps - Power Apps - 重置表单字段
- matlab - 如何绘制二进制数据的 BER 与 SNR 曲线
- c# - LINQ 在 SQL 语句中生成额外的 IS NULL 条件
- ruby-on-rails - Rails API,Cloudinary:未初始化的常量 CLOUDINARY_CLOUD_NAME (NameError)
- sapui5 - 动态设置值时刷新控件
- c# - 实体框架与 OrderBy 不同