For each文

解決


aq  2005-05-24 02:09:42  No: 14970

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


にしの  2005-05-24 02:15:38  No: 14971

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


aq  2005-05-24 05:36:47  No: 14972

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


aq  2005-05-24 06:18:47  No: 14973

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

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

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

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


Syake  2005-05-24 17:40:08  No: 14975

ワイルドカードは使用できません
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

あっ!間違えた。

ほにゃらら.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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加