在while循环中增加一个变量? (不是数组)

increment a variable in while loop? (not an array)

我在对话框页面中有很多 EditControls。它们称为 Edit1、Edit2 等。是否可以像使用数组一样使用 while 循环从这些控件中获取值?我知道对于一个数组你可以做类似的事情:

begin
// Loop 5 times
  for i := 1 to (10 div 2) do
    ShowMessage(Edit[i].Text); <- here I need to get value of Edit1, Edit2, et cetera
end;

如何使用字符串而不是数组来执行此操作?

确保没有ComponentCount,毕竟是TComponent属性。如果存在,请使用下面的代码并将名称 Form1 替换为您的 Object Parent of Edits.

的名称
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
   for i := 0 to Form1.ComponentCount -1 do
      if Form1.Components[i].Name = 'Edit' + IntToStr(i+1) then
         TEdit(Form1.Components[i]).Text := 'NewTextEdit' + IntToStr(i+1);
end;

如果您想搜索表单中的所有 TEdit,您可以执行以下操作:

var
    i: Integer;
begin
    for i := 0 to Self.ComponentCount- 1 do
        if Self.Components[i] is TEdit then
            ShowMessage(TEdit(Self.Components[i]).Text);
end;

如果您的 TEdits 被放置在其他控件(如 GroupBoxes、Panel 等)上,并且您想只在这些控件内搜索,那么您应该这样做:

var
    i: Integer;
begin
    for i := 0 to gbx1.ControlCount - 1 do
        if gbx1.Controls[i] is TEdit then
            ShowMessage(TEdit(gbx1.Controls[i]).Text);
end;

或者您可以在多个 TWinControl 中搜索:

var
    i: Integer;
begin
    for i := 0 to Self.ControlCount - 1 do    
    begin    
        //TEdits are in TGroupBox
        if Self.Controls[i] is TGroupBox then
            ReadEdits(TGroupBox(Self.Controls[i]))
        //TEdits are in TPanel
        else if Self.Controls[i] is TPanel then
            ReadEdits(TPanel(Self.Controls[i]))
        else ... (other possible Parent Controls)  
    end
end;

procedure TForm1.ReadEdits(aParent: TWinControl);
var
    i: Integer;
begin
    for i := 0 to aParent.ControlCount - 1 do
        if aParent.Controls[i] is TEdit then
            ShowMessage(TEdit(aParent.Controls[i]).Text)
end;