procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  vCount: Integer;
  vForm: TForm;
  vCheckBox: TCheckBox;
begin
  vForm := TForm.Create(Self);
  try
    for I := 0 to 9 do begin
      vCheckBox := TCheckBox.Create(Self);
      vCheckBox.Top := I * vCheckBox.Height;
      vCheckBox.Parent := vForm;
      vCheckBox.Caption := Format('测试%d', [I]);
    end;
    vForm.ShowModal;
    vCount := 0;
    for I := 0 to vForm.ControlCount - 1 do
      if vForm.Controls[I] is TCheckBox and
        TCheckBox(vForm.Controls[I]).Checked then
        Inc(vCount);
    Caption := IntToStr(vCount);
  finally
    vForm.Free;
  end;
end;

解决方案 »

  1.   

    嘻嘻,很好办啦;
    关键是你的参数的调用;
    一个窗体一定要是自动创建的;
    嘻嘻;不过有点麻烦,写吧
    Procedure...
    var
      I : Integer;
      Box : TCheckBox;
      Form2 : TForm2;
    begin
      Form2 := TForm.Create(Application);
      for I := 0 to Random(100) do//嘻嘻,来个大的;
      begin
        Box := TCheckBox.Create;
        Box.Parent := Form2;
        Box.Left := ..//Integer;
        Box.Top := ..//;
        Box.Width := ..;//
        Box.Height := ..;
        Box.Nzme := 'Box' + IntToStr(I);
        Box.Visible := True;
      end;
      Form2.ShowModal;
    end;
     
     Form2 ;
     begin
      for J : 0 to Form2.ComponentCount-1 do
      begin
        if Form2.Components[J] is TCheckBox then
        Inc(H);//你自己定义,全局的就行了,然后,form1引用
      end;
     eng
      

  2.   

    但是如果是我还想知道在所有创建的Tcheckbox中具体哪一个被选中怎么办呢,有没有办法控制呀,并且就上面所写的在FORM2中,就没有办法进行确认呀,不能在FORM2中进行控制吧!谢谢!!
      

  3.   

    嘻嘻
    begin
      for J : 0 to Form2.ComponentCount-1 do
      begin
        if Form2.Components[J] is TCheckBox then
          if TCheckBox(Form2.Components[J]).OnEnter then
          begin
            //嘻嘻,就是它啊;
            Showmessage(TCheckBox(Form2.Components[J]).Caption);
          end;
      end;
     eng
      

  4.   

    你可以这样:
      1。在A窗体调用B窗体的时候,B窗体的生成时动态的,使用B类的共有函数或重载Create函数,这样可以实现动态产生控件,对于控件的管理,可以使用其父类控件来控制。
      2。在B窗口返回的时候使用一个公用变量来表明选择结果,这样更好。