2017-12-14 3 views
0

대화 상자 페이지에 많은 EditControls가 있습니다. 이들은 Edit1, Edit2 등으로 불립니다. 배열에서 할 수있는 것처럼 while 루프를 사용하여 해당 컨트롤에서 값을 가져올 수 있습니까? 배열에 대해 다음과 같이 할 수 있습니다.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; 

배열 대신 배열을 사용하는 방법 은요?

+1

는이 https://stackoverflow.com/a/13649350/2093077에게 – saastn

+0

감사를 봐 왔지만, 그것은 나에게 선언되지 않은 식별자 제공 : '부품 수'- 아마 FastReport –

+0

에서 지원되지 않습니다 당신은'Form1을 사용해야합니다. 편집 컨트롤의 소유자가 아닌 다른 클래스에서 사용하는 경우 'ComponentCount'를 사용하십시오. – saastn

답변

1

ComponentCount이 없으면 TComponent 속성이어야합니다. 존재하는 경우 아래 코드를 사용하여 Form1Object Parent of Edits의 이름으로 바꿉니다. 당신의 TEdits가 GroupBoxes처럼 (다른 컨트롤에 배치되는 경우

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; 

, 패널 :

양식의 모든은 TEdit (들)을 검색 할 경우
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; 
0

, 다음을 수행 할 수 있습니다

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; 

또는 여러 TWinControls에서 검색 할 수있다 : 등) 그리고 당신은 당신이해야 할 바로 그 컨트롤 내에서 검색하고자하는

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; 
관련 문제