共有六个CheckBox,分别对应六个变量表达式:
□CheckBox1,对应计数变量i1和赋值变量Var_a:=表达式1;
□CheckBox2,对应计数变量i2和赋值变量Var_a:=表达式2;
□CheckBox3,对应计数变量i3和赋值变量Var_a:=表达式3;
□CheckBox4,对应计数变量i4和赋值变量Var_a:=表达式4;
□CheckBox5,对应计数变量i5和赋值变量Var_a:=表达式5;
□CheckBox6,对应计数变量i6和赋值变量Var_a:=表达式6;
当CheckBox被选中时,变量i1,i2,i3,i4,i5,i6均为1,否则为0;如果全部的CheckBox均被选中,则可这样写代码对Var_a赋值:
For j:=1 to 6 do 
  begin  
    case j of
      1: Var_a:=表达式1;
      2: Var_a:=表达式2;
      3: Var_a:=表达式3;
      4: Var_a:=表达式4;
      5: Var_a:=表达式5;
      6: Var_a:=表达式6;
    end;
    其它语句...
  end;
但是当某几个CheckBox被选中时(选中总数量用i_sum表示,i_sum=i1+i2+i3+i4+i5+i6)
需根据具体选中的某几个CheckBox执行For循环.
For j:=1 to i_sum do 
  begin  
    Var_a:=表达式?;(即j=1时,执行第一个被选中CheckBox所对应的表达式,j=2时,执行第二个被选中CheckBox所对应的表达式,以此类推,直到j=i_sum)
    其它语句...
  end;
举例说,我选中了i2,i3,i5三个CheckBox,则变量i2,i3,i5均为1,变量i1,i4,i6为0;总选中数量为i_sum=3;For循环为:
For j:=1 to 3 do 
  begin  
    Var_a:=表达式?;(即j=1时,执行Var_a:=表达式2;j=2时执行Var_a:=表达式3;j=3时执行Var_a:=表达式5)
    其它语句...
  end;
求助各位大侠:如何编写For循环内的代码,以判断是哪几个CheckBox被选中,并执行对应的变量赋值语句?

解决方案 »

  1.   

    用一个数组吧
    var
      check: array of Integer;//可以声明全局变量,方便在此引用
      i:Integer;
    begin
      SetLength(check,6);//这个可以在初始化时创建
      for i := 0 to High(check) do
      begin
        if check[i] > 0 then
        begin
          Var_a := 表达式check[i]
        end;
      end;
    end;说明,在checkbox选中时,把对应的check[i]的值赋值为该checkbox对应表达式的序号,如5,6
    如果为选中的,把check[i]:=0;
      

  2.   

    可以這樣
    1、設置checkbox的tag屬性,若被選中,則設定tag為1
    if checkbox.check then  checkbox.tag:=1 else checkbox.tag:=0 
    記得在formcreate時也做這個檢查
    2、將這些checkbox放到專門的容器中,如果數量確定,就不需要了,直接找給定的組件
      for i:=0 to Container.WinControls.Count-1 do
      begin
        if 元件1的tag=1 then
        if 元件2的tag=1 then
      end;
      

  3.   

    不需要用循环吧, 把这六个TCheckBox的OnClick 用同一个事件就好了, 然后判断TAG 去触发事件就好了
      

  4.   

    我用循环的主要目的,不是为了解决Var_a的赋值问题,而是Var_a的赋值后"其它语句"必须用FOR循环,只不过Var_a的赋值仅仅是FOR循环"其它语句"中的一个部分而已.
    另外,下列赋值中表达式1,表达式2,表达式3,表达式4,表达式5,表达式6无数字上的联系,即可以表达成:表达式甲,表达式乙,表达式丙,表达式丁,表达式戊,表达式己等.
    Var_a:=表达式1;
    Var_a:=表达式2;
    Var_a:=表达式3;
    Var_a:=表达式4;
    Var_a:=表达式5;
    Var_a:=表达式6;
      

  5.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        CheckBox3: TCheckBox;
        CheckBox4: TCheckBox;
        CheckBox5: TCheckBox;
        CheckBox6: TCheckBox;
        procedure FormCreate(Sender: TObject);
      private
        b1,b2,b3,b4,b5,b6:Boolean;
        procedure MyCheckBoxClick(Sender: TObject);
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.MyCheckBoxClick(Sender: TObject);
    begin
      case TCheckBox(Sender).Tag of
        1:b1:=TCheckBox(Sender).Checked;
        2:b2:=TCheckBox(Sender).Checked;
        3:b3:=TCheckBox(Sender).Checked;
        4:b4:=TCheckBox(Sender).Checked;
        5:b5:=TCheckBox(Sender).Checked;
        6:b6:=TCheckBox(Sender).Checked;
      end;
      if b1 then
        Var_a:=表達式1;
      if b2 then
        Var_a:=表達式2;
      if b3 then
        Var_a:=表達式3;
      if b4 then
        Var_a:=表達式4;
      if b5 then
        Var_a:=表達式5;
      if b6 then
        Var_a:=表達式6;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      CheckBox1.Tag:=1;
      CheckBox2.Tag:=2;
      CheckBox3.Tag:=3;
      CheckBox4.Tag:=4;
      CheckBox5.Tag:=5;
      CheckBox6.Tag:=6;
      CheckBox1.OnClick:=MyCheckBoxClick;
      CheckBox2.OnClick:=MyCheckBoxClick;
      CheckBox3.OnClick:=MyCheckBoxClick;
      CheckBox4.OnClick:=MyCheckBoxClick;
      CheckBox5.OnClick:=MyCheckBoxClick;
      CheckBox6.OnClick:=MyCheckBoxClick;
    end;end.
      

  6.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        CheckBox3: TCheckBox;
        CheckBox4: TCheckBox;
        CheckBox5: TCheckBox;
        CheckBox6: TCheckBox;
        procedure FormCreate(Sender: TObject);
      private
        b1,b2,b3,b4,b5,b6:Boolean;
        procedure MyCheckBoxClick(Sender: TObject);
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.MyCheckBoxClick(Sender: TObject);
    begin
      case TCheckBox(Sender).Tag of
        1:b1:=TCheckBox(Sender).Checked;
        2:b2:=TCheckBox(Sender).Checked;
        3:b3:=TCheckBox(Sender).Checked;
        4:b4:=TCheckBox(Sender).Checked;
        5:b5:=TCheckBox(Sender).Checked;
        6:b6:=TCheckBox(Sender).Checked;
      end;
      if b1 then
        Var_a:=表達式1;
      if b2 then
        Var_a:=表達式2;
      if b3 then
        Var_a:=表達式3;
      if b4 then
        Var_a:=表達式4;
      if b5 then
        Var_a:=表達式5;
      if b6 then
        Var_a:=表達式6;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      CheckBox1.Tag:=1;
      CheckBox2.Tag:=2;
      CheckBox3.Tag:=3;
      CheckBox4.Tag:=4;
      CheckBox5.Tag:=5;
      CheckBox6.Tag:=6;
      CheckBox1.OnClick:=MyCheckBoxClick;
      CheckBox2.OnClick:=MyCheckBoxClick;
      CheckBox3.OnClick:=MyCheckBoxClick;
      CheckBox4.OnClick:=MyCheckBoxClick;
      CheckBox5.OnClick:=MyCheckBoxClick;
      CheckBox6.OnClick:=MyCheckBoxClick;
    end;end.
      

  7.   

    用个孔件数组
    var
      AllCHECKBOX: array[1..6] of TCheckBox;
    点的时候把他AllCHECKBOX[i] := 当前控件  不就OK 拉