将计数器添加到变量名delphi

时间:2016-01-29 16:59:31

标签: delphi for-loop

我有这些变量

edt_variavel := 'Hello'

edt_variavel2 := 'Hello2'

我正在使用for循环根据以下代码查找edt_variavels:

for i := 1 to 10 do
    TEdit(FindComponent('edt_variavel'+IntToStr(i))).Text; //HEllo, //hello2

如何将计数器放在变量名中?

我试过这样的事情......

for i := 1 to 10 do
    variavel1+ (i) := TEdit(FindComponent('edt_variavel'+IntToStr(i))).Text; 

2 个答案:

答案 0 :(得分:3)

正如其他人所说,你不能像你要求的那样创建变量名。您可以使用数组,例如:

var
  variavel: array[1..10] of string;
  i: Integer;

for i := 1 to 10 do
  variavel[i] := TEdit(FindComponent('edt_variavel'+IntToStr(i))).Text; 

FindComponent()有一些开销,所以你应该考虑将你的TEdit对象放在一个数组中,例如在创建表单时,你不必去寻找它们需要时:

private
  edt_variavel: array[1..10] of TEdit;

procedure TMyForm.FormCreate(Sender: TObject)
var
  i: Integer;
begin
  for i := 1 to 10 do
    edt_variavel[i] := TEdit(FindComponent('edt_variavel'+IntToStr(i))); 

  { or simply:
  edt_variavel[1] := edt_variavel1; 
  ...
  edt_variavel[10] := edt_variavel10; 
  }
end;

var
  variavel: array[1..10] of string;
  i: Integer;
begin
  ...
  for i := 1 to 10 do
    variavel[i] := edt_variavel[i].Text;
  ...
end;

或者,如果你真的想要动态命名的变量,你可以使用TDictionary代替(虽然它会比数组有更多的开销):

var
  variavel: TDictionary<String, String>;
  i: Integer;
  s: string;
begin
  ...
  variavel := TDictionary<String, String>.Create;
  for i := 1 to 10 do
    variavel.Add('edt_variavel'+IntToStr(i), edt_variavel[i].Text);
  ...
  variavel['edt_variavel'+IntToStr(SomeNumber)] := '...';
  ...
  value := variavel['edt_variavel'+IntToStr(SomeNumber)];
  ...
  variavel.Free;
end;

答案 1 :(得分:1)

您无法在运行时定义变量名称。你必须使用一个数组。