首页 > 解决方案 > 动态创建一个没有预先声明的变量限制的新组件?

问题描述

我正在做一个学校项目。我需要用户单击一个按钮,每次按下按钮时都会创建一个具有新名称的新组件。我的想法看起来像这样

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,这不适用于动态变量)

请告知我如何在每次单击按钮时创建一个新组件而不受先前存在的变量的限制,或者请告知我如何每次都可以使用“无限”数量的变量来创建一个新组件。

标签: delphidelphi-7

解决方案


您只需要声明 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 的ComponentsControls属性中,因为您将 Form 分别指定为组件的OwnerParent


推荐阅读