2017-12-14 8 views
0

私は、多くのEditControlをダイアログページに持っています。これらは、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プロパティです。存在する場合は、次のコードを使用して、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; 
0

フォーム内のすべての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がグループボックス、パネルなどの他のコントロール(上に置かれている場合

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; 
関連する問題