在窗体form中有n个checkbox控件的时候我可通过下边的代码实现对它的状态的判断!
  procedure TForm1.Button1Click(Sender: TObject);
var
    str:string;
    i:integer;
begin
      for i:=0 to  form1.ComponentCount-1 do
        begin
          if (form1.Components[i] is Tcheckbox) then
             begin
               if Tcheckbox(form1.Components[i]).Checked then
                 str:=str+'y'
                 else
                 str:=str+'n';
         end;
         end;
         edit1.Text:=str;end;
但是在panel中却不能实现了!
代码如下:
   procedure Tfrmsetuser.getusermanu;
var
    i:integer;
    str:string;
begin
    for i:=0 to p8.ComponentCount-1 do
    begin
      if (p8.Components[i] is Tcheckbox) then
         if Tcheckbox(p8.Components[i]).Checked then
              str:=str+'y'
              else
              str:=str+'n';
    end;          end;
什么原因?难道只有form才能?不会的!待解决!学习ing!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      str:string;
      i:integer;
    begin
      for i:=0 to  form1.ComponentCount-1 do
      begin
        if (form1.Components[i] is Tcheckbox) 
          and (.GetParentComponent.Name = p8.Name) then
        begin
          if Tcheckbox(form1.Components[i]).Checked then
            str:=str+'y'
          else
            str:=str+'n';
        end;
      end;
      edit1.Text:=str;
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      str:string;
      i:integer;
    begin
      for i:=0 to  form1.ComponentCount-1 do
      begin
        if (form1.Components[i] is Tcheckbox) 
          and (form1.Components[i].GetParentComponent.Name = p8.Name) then
        begin
          if Tcheckbox(form1.Components[i]).Checked then
            str:=str+'y'
          else
            str:=str+'n';
        end;
      end;
      edit1.Text:=str;
    end;
      

  3.   

    我是说把许多的checkbox放置在panel中,来实现判断那些checkbox的点击要求!
      

  4.   

    对,不管在form里的什么控件里面,效果一样的!对,但是可以直接指到某个控件吗?
    继续ing
      

  5.   

    确实哈,我试过了,就是不行。在Form中没有问题,在panel中即使你指定checkbox的parent为panel,也不行。
      

  6.   

    KAO
    怎么不行?
    当然可以了
    你可以用controls啊,为何一定要用componet呢?
    给大家一个过程
    procedure test(pn:TWincontrol);
    var
      i:integer
    begin
    .ControlCount-1 do
     begin
        if uppercase(pn.Controls[i].ClassName)='TEDIT' then
                TEdit(pn.Controls[i]).Text :='';
        if uppercase(pn.Controls[i].ClassName)='TCHECKBOX' then
                TCheckBox(pn.Controls[i]).Checked :=false;
        if uppercase(pn.Controls[i].ClassName)='TPANEL' then
                ClearDisplay(TPanel(pn.Controls[i]));
        if uppercase(pn.Controls[i].ClassName)='TMEMO' then
               TMemo(pn.Controls[i]).Lines.Clear;
        if uppercase(pn.Controls[i].ClassName)='TFRAMEPANEL' then
         begin
                 TFramePanel(pn.Controls[i]).clearDisplay;
                 TFramePanel(pn.Controls[i]).Enabled :=false;
         end;
     end;
    end;
      

  7.   

    上面的代码可能有点问题
    这样吧
    procedure TfrmTryRun.ClearDisplay(pn: TPanel);
    var
      i:integer;
    begin
       for i:=0 to pn.ControlCount-1 do
     begin
        if uppercase(pn.Controls[i].ClassName)='TEDIT' then
                TEdit(pn.Controls[i]).Text :='';
        if uppercase(pn.Controls[i].ClassName)='TCHECKBOX' then
                TCheckBox(pn.Controls[i]).Checked :=false;
        if uppercase(pn.Controls[i].ClassName)='TPANEL' then
                ClearDisplay(TPanel(pn.Controls[i]));
        if uppercase(pn.Controls[i].ClassName)='TMEMO' then
               TMemo(pn.Controls[i]).Lines.Clear;
     end;
      

  8.   

    还有别的方法实现吗?学习ing;
      

  9.   

    应该使用Panel1.ControlCount和Panel1.Controls[I]