複数のコンポーネントを一括処理するには?

解決


ちょっぴー  2003-08-28 16:39:06  No: 4491

現在試しているのは
10個のComboBox(それぞれに0〜9までの数字が入っている)をフォームに配置。
そしてあらかじめ0〜9までの数字を代入しておいた10個の配列変数を使って
順番にComboBox1からComboBox10のItemIndexにA[1]からA[10]までを
代入していっているのですが

ComboBox1.ItemIndex := A[1];
ComboBox2.ItemIndex := A[2];
.
.
.

とやっています。
せっかく配列変数を使っているのでFor文なんかで一括処理なんて感じで
やりたいのですがComboBox等を配列変数みたいに扱う方法がわかりません。

今は10個だけどこれが100個とかになったらと思って
色々と試してみたのですがどうしてもできません。

初歩的な質問かと思いますがお願いします。


たかみちえ  URL  2003-08-28 16:50:46  No: 4492

親コントロール(たいていはフォームかパネルでしょう)のControlCount、Controlsプロパティをヘルプで引いてみてください。

  今時間がないので、これだけ。


Halbow  URL  2003-08-28 17:04:16  No: 4493

Halbow です。

規則正しい名前を持つ場合は、FindComponent() が使えます。

function FindComponent(const AName: string): TComponent;

Name プロパティーに相当する文字列から、TComponent を返してくれます。
適切にキャストして、特定のクラスのプロパティーやメソッドにアクセス
します。今回の例では

var
  i:integer;
  Compo:TComponent;
begin
  for i := 1 to 10 do begin
    Compo := FindComponent('ComboBox'+IntToStr(i));
    if Assigned(Compo) then TComboBox(Compo).ItemIndex := A[i];
  end;
end;

になると思います。


ちょっぴー  2003-08-28 17:27:18  No: 4494

たかみちえさん、Halbowさんありがとうございました。
しかもこんなに早く返事がいただけるとは・・・
本当にありがとうございます。

こんな方法があるんですね。
これで他にも抱えてた問題も解決しそうです。
とても勉強になりました。


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

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






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