在delphi中重置程序

时间:2013-06-19 20:50:11

标签: delphi delphi-7

我正在使用Delphi 7中的这个程序并使用Page-Control你们中的任何人都可以快速重置那些作为页面的复选框和组合框吗?没有调用每个复选框并更改其属性?因为它们在程序中大约有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;

但是我得到一个错误列出了外边界?有什么想法吗?

3 个答案:

答案 0 :(得分: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;

编辑:按照雷米指出的更正

答案 1 :(得分:1)

您可以在表单中执行以下操作:

for i := 0 to ComponentCount-1 do
    if Components[i] is TCheckBox then begin
       cb := TCheckBox(Components[i]);
       cb.checked := false;
    end;
end;

答案 2 :(得分: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;