For each文

解決


aq  2005-05-24 02:09:42  No: 14970  IP: [192.*.*.*]

VBから移行した者です。
すべてのeditコンポーネントをリセットするプログラムを書きたいのですが、VBであるFor each文と同じものがあるらしいのですが、どのように書いたらいいのでしょうか?
一通りログも見ましたがないようなので質問させていただきました。
よろしくお願いします。

編集    削除
にしの  2005-05-24 02:15:38  No: 14971  IP: [192.*.*.*]

一通り見ていれば、絶対にあると思いますよ。いくつも見つかります。
ComponentCountプロパティが、そのコンポーネントに張り付いているコンポーネントの数で、Componentsプロパティが、張り付いているコンポーネント配列です。

編集    削除
aq  2005-05-24 05:36:47  No: 14972  IP: [192.*.*.*]

確かに(汗
Componentで検索したらいろいろ見つかりました。
FindComponentを使用することにしました。
どうも、ありがとうございました。

編集    削除
aq  2005-05-24 06:18:47  No: 14973  IP: [192.*.*.*]

解決押した後ですが、すみません。

それで、ログを参考にワイルドカードを用いて、以下のように書いたのですが、リセットされません。
何故なのでしょうか?

procedure TForm1.risetto_buttonClick(Sender: TObject);
var
a : Integer;
begin
for Cnt := 0 to 100 do
begin
//VBの癖で最後に_editや_labelなどと名前をつけています。
(FindComponent('*_edit') As TEdit).Text := '';
end;
end;
end.

編集    削除
わいるどかーど?  2005-05-24 06:42:43  No: 14974  IP: [192.*.*.*]

>(FindComponent('*_edit') As TEdit).Text := '';
もしかして、ワイルドカードのつもり?そんなもの使えません。

編集    削除
Syake  2005-05-24 17:40:08  No: 14975  IP: [192.*.*.*]

ワイルドカードは使用できません
TagとかNameで工夫したほうが良いでしょう

procedure TForm1.Button1Click(Sender: TObject);
var
   i :Integer;
begin
   for i := 0 to ControlCount -1 do
   begin
      if Components[i] is TEdit then//該当コンポーネントがTEditか判断
      begin
          //条件に合ったコンポーネントを初期化(全てだったらいらないけど)
          //例えば
          //if (Components[i] as TEdit).Tag = 1 then 
          //(一括で初期化したいEditのTagを1にしておく)
          //Nameで判断(Name付けに特定のルールを・・・)
         if (Components[i] as TEdit).Name = 'Edit' + IntToStr(i +1) then
         begin
            (Components[i] as TEdit).Text := '';
         end;
      end;
   end;
end;
かな

編集    削除
Syake  2005-05-24 19:58:07  No: 14976  IP: [192.*.*.*]

あっ!間違えた。

ほにゃらら.ControlCount  で
Controls[i] is ・・・Controls[i] as ・・・

ComponentCount が
Components[i] is ・・・Components[i] as ・・・
 
でした。
違いはHelpをm(__)m

編集    削除
aq  2005-05-28 10:20:57  No: 14977  IP: [192.*.*.*]

そうですね、Tagという手もありました。
ありがとうございました。

編集    削除