var
  i:Integer;
  frmComponent:TComponent;
  z : String;
begin  //确定
  with GroupBox1 do
  begin
    for i:=0 to ControlCount-1 do
     begin
     if  Controls[i] is TCheckBox  then
        if TCheckBox(Controls[i]).Checked =true then
          z := TCheckBox(Controls[i]).Caption;
          zz := zz +','+z;
     end;
  end;
  Dialogs.ShowMessage(zz);
end;
怎么遍历容器上CheckBox 值为true的caption?

解决方案 »

  1.   


    var
       i:integer;
    begin
    for i:=1 to form1.ComponentCount do
       begin
       if form1.Components[i-1] is Tcheckbox then
          begin
          if Tcheckbox(form1.Components[i-1]).checked then
             showmessage(Tcheckbox(form1.Components[i-1]).caption);
          end;
       end;
    end;
      

  2.   

    奇怪哦!
     showmessage(Tcheckbox(form1.Components[i-1]).caption);
    1楼你那句可以弹出被选择的内容
    但是为什么我加个变量z,改成
    z := Tcheckbox(form1.Components[i-1]).caption;
    showmessage(z);
    就会弹出没被选中的那些的空值
      

  3.   


          if Tcheckbox(form1.Components[i-1]).checked then
             begin
             z:=Tcheckbox(form1.Components[i-1]).caption;
             showmessage(z);
             end;没问题啊你是不是if下面没有begin end?
      

  4.   

     with GroupBox1 do
      begin
         for i:=0 to ControlCount-1 do
         if Controls[i] is Tcheckbox then
         begin
         if Tcheckbox(Controls[i]).checked then
            z :=Tcheckbox(Controls[i]).caption;
            Dialogs.ShowMessage(z);  //同等于showmessage(z);
         end;
      end;
    这里是我写的代码
    我在容器上遍历的而不是窗体上.
      

  5.   


    var
      i: Integer;
      frmComponent: TComponent;
      //z: string;
      zz: string; //再次定义一下
    begin //确定
      zz := '';//初始化一下,免得出编译提示
      with GroupBox1 do
      begin
        for i := 0 to ControlCount - 1 do
        begin
          if Controls[i] is TCheckBox then
            if TCheckBox(Controls[i]).Checked then
              zz := zz + ',' + TCheckBox(Controls[i]).Caption;
        end;
      end;
      Dialogs.ShowMessage(zz);
    end
      

  6.   


    if Tcheckbox(Controls[i]).checked then 
       begin
       z :=Tcheckbox(Controls[i]).caption; 
       Dialogs.ShowMessage(z);  //同等于showmessage(z); 
       end; 
      

  7.   

    blazingfire 与skylkj 两位牛人的方法都正确
    是小弟的失误,少了个begin ...end 
    最后还有个问题
    zz := zz + ',' + TCheckBox(Controls[i]).Caption;
    这里判断只有一个的时候不能根据i来判断吧?
    指的是只有一个TCheckBox为true的时候我怎么判断?不要逗号
      

  8.   

    if Tcheckbox(Controls[i]).checked then  
       begin 
       z :=Tcheckbox(Controls[i]).caption;  
       Dialogs.ShowMessage(z);  //同等于showmessage(z);  
       end; 
    记得放在begin  end之间