繁体   English   中英

TEdit的Delphi数组

[英]Delphi array of TEdit

请帮助我,我对Delphi是陌生的。 我需要动态生成文本框

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

而且我也可以像这样(例如)检索它们的值,

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

在Delphi上可以吗? 如果可能的话,该怎么做?

要回答您提出的问题:是的,有可能。

详细说明: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);
.
.
.

如果您想要特定编辑框(例如第3个)的文本,则可以使用

Edits[2].Text

请记住,动态数组的索引总是从0开始(但是,如果要循环所有索引,请使用LOW和HIGH,因为它们的作用是这样,这将使您对阅读代码的任何人都很清楚,即使他们可能熟悉或可能不熟悉Delphi)。 请注意,我是如何只在代码中的一个位置指定编辑框的数量,如果我想使用一个不同的数字,那就只能是我必须更改的一个位置-所有其余代码将自动适应正确的数字,无需修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM