-1

私は Delphi 7 でこのプログラムを実行していますが、ページ コントロールを使用して、ページ上にあるチェック ボックスとコンボ ボックスを簡単にリセットする方法はありますか? 各 Check Box を呼び出してその Properties を変更せずに? プログラムには約150個のチェックボックスがあり、すべての名前を入力してチェックを外したくないからですか?次のコードを使用しようとしました:

var
 i : Integer;
 cb : TCheckBox;
 cbx : TComboBox;
begin
 ADOQuery1.SQL.Clear;
  for i := 1 to (ComponentCount) do
    Begin
     if Components[i] is TCheckBox then
      begin
       cb := TCheckBox(Components[i]);
       cb.checked := false;
      end;
     if Components[i] is TComboBox then
      begin
       cbx := TComboBox(Components[i]);
       cbx.ItemIndex := -1;
      end;
   end;
End;

しかし、エラー List out od Bounds ? が表示されます。理由はありますか?

4

3 に答える 3

3

私の頭の上から....これ実行する必要があります。

procedure ResetControls(aPage:TTabSheet);
var
  loop : integer;
begin
  if assigned(aPage) then
  begin
    for loop := 0 to aPage.controlcount-1 do
    begin
      if aPage.Controls[loop].ClassType = TCheckBox then
        TCheckBox(aPage.Controls[loop]).Checked := false
      else if aPage.Controls[loop].ClassType = TComboBox then
        TComboBox(aPage.Controlss[loop]).itemindex := -1;
    end;
  end;
end;

編集:レミーが指摘したように修正

于 2013-06-19T21:01:46.543 に答える
1

フォーム内で次のようなことができます。

for i := 0 to ComponentCount-1 do
    if Components[i] is TCheckBox then begin
       cb := TCheckBox(Components[i]);
       cb.checked := false;
    end;
end;
于 2013-06-19T21:02:55.290 に答える
0
procedure ResetControls(Container: TWinControl);
var
  I: Integer;
  Control: TControl;
begin
  for I := 0 to Container.ControlCount - 1 do
  begin
    Control := Container.Controls[I];

    if Control is TCheckBox then
      TCheckBox(Control).Checked := False
    else
    if Control is TComboBox then
      TComboBox(Control).ItemIndex := -1;

    //else if ........ other control classes

    ResetControls(Control as TWinControl); //recursive to process child controls
  end;
end;
于 2013-06-19T21:35:08.323 に答える