我有这些变量
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;
答案 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)
您无法在运行时定义变量名称。你必须使用一个数组。