Delphi数组的TEdit

时间:2015-07-12 13:16:20

标签: delphi

请帮助我,我是Delphi的新手。 我需要动态生成文本框,如

text[1]
text[2]
...
text[n]

我还可以检索它们的价值 也许像这样(例子),

for (i=1; i<=n; i++)
arrayOfTxt[i] = text[i].text;

Delphi有可能吗? 如果有可能,那该怎么做?

1 个答案:

答案 0 :(得分:3)

回答你提出的问题:是的,这是可能的。

详细说明:Delphi具有所谓的动态数组,在编译时不指定索引的边界,但仅在运行时指定。

因此,创建用户提供的编辑框数量(TEdit)的功能可以是这样的:

TYPE
  TEditArr = ARRAY OF TEdit;

FUNCTION MakeEditBoxes(ParentForm : TForm ; Count : Cardinal) : TEditArr;
  VAR
    I : Cardinal;

  BEGIN
    SetLength(Result,Count);
    FOR I:=1 TO Count DO BEGIN
      Result[PRED(I)]:=TEdit.Create(ParentForm);
      Result[PRED(I)].Parent:=Parent
    END
  END;

您可以使用以下内容:

将以下行放在表单的类声明中:

Edits : TEditArr;

然后创建如下框:

PROCEDURE TForm1.Button1Click(Sender : TObject);
  VAR
    E : TEdit;
    Y : Cardinal;

  BEGIN
    Edits:=MakeEditBoxes(Self,20);
    Y:=0;
    FOR E IN Edits DO BEGIN
      E.Top:=Y; E.Left:=0;
      INC(Y,E.Height+8)
    END
  END;

要访问他们的文本,您可以使用类似的内容(假设您要将所有文本复制到表单上的单个多行编辑框(TMemo)):

.
.
.
VAR E : TEdit;
.
Memo1.Lines.Clear;
FOR E IN Edits DO Memo1.Lines.Add(E.Text);
.
.
.

或 - 如果您想通过索引访问它们:

.
.
.
VAR I : Integer;
.
Memo1.Lines.Clear;
FOR I:=LOW(Edits) TO HIGH(Edits) DO Memo1.Lines.Add(Edits[I].Text);
.
.
.

如果你想要一个特定编辑框的文本(例如第三个),你可以使用

Edits[2].Text

记住动态数组总是将其索引设置为0(但如果你想绕过所有索引,请使用LOW和HIGH,就像它们所用的那样,并且它会清楚地表明你正在做什么对任何阅读者你的代码,即使他们可能熟悉或不熟悉Delphi)。请注意我如何在代码中的一个地方指定编辑框的数量,如果我想要一个不同的数字,它只会是我必须改变的一个地方 - 所有剩余的代码将自动适应没有修改的正确号码。