2016-01-29 18 views
-1

我有這些變量添加計數器變量名德爾福

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; 
+3

不要使用10個不同的變量。使用數組。 –

+0

這是一個想法... –

+2

@GuilhermeLima它不是一個想法,它是唯一正確的解決方案 –

回答

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; 

或者,如果你真的想要動態命名變量,你可以使用0123改爲(儘管它的開銷比陣列多):

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

你不能在運行時定義一個變量名。你必須使用一個數組。