-1

我在 Delphi 7 中执行此程序并使用页面控件,你们有没有快速重置页面上的复选框和组合框的方法?无需调用每个复选框并更改其属性?因为他们在程序中有大约 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 回答