戻る ホーム 上へ 進む

コントロールを配列にして一括処理したい

Tip

VBの様にコントロールを配列化して、コントロールのグループに対して 一括処理をしたい時があります。コントロールの名前を工夫すれば少ない手間で コントロールを配列化できます。以下はフォーム上の10個のスピードボタンを 配列化して、一括でキャプションを設定する例です。
type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    SpeedButton7: TSpeedButton;
    SpeedButton8: TSpeedButton;
    SpeedButton9: TSpeedButton;
    SpeedButton10: TSpeedButton;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
    buttons: array[1..10] of TSpeedButton;
  end;

(略)

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  {コンポーネントを配列化する}
  for i:=1 to 10 do begin
    buttons[i] := FindComponent('SpeedButton'+IntToStr(i)) as TSpeedButton;
    buttons[i].tag := i; {ついでに 後の事も考えて tag も設定しておく}
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  {ボタンを押すと、スピードボタンのキャプションを一括設定する。}
  for i:= 1 to 10 do
    buttons[i].Caption := IntToStr(i);
end;

解説

FindComponent はフォームにのっているコンポーネントを名前で探してくれる 便利なメソッドです。上の例のように、 配列化したいコンポーネントの名前の末尾が数字になるように工夫しておけば、 FindComponent を使って簡単にコンポーネントを配列化することができます。

戻る ホーム 上へ 進む

inserted by FC2 system