procedure TForm1.Button1Click(Sender: TObject);
var
  MyLabel:array of TLabel;
  MyCheckBox:array of TCheckBox;
  i,n:integer;
begin
  SetLength(MyLabel,6);
  for i := 0 to 5 do
  begin
    MyLabel[i] := TLabel.Create(Self);
    MyLabel[i].Top := topic_i;
    MyLabel[i].Left := 20;
    MyLabel[i].Height := 30;
    MyLabel[i].Width := 100;
    MyLabel[i].Parent := Self;
    MyLabel[i].Caption := '题目 '+inttostr(i+1);
    MyLabel[i].Show;
    topic_i:=topic_i+30;
    SetLength(MyCheckBox,4);
      for n := 0 to 3 do
      begin
        MyCheckBox[n] := TCheckBox.Create(Self);
        MyCheckBox[n].Top := topic_i ;
        MyCheckBox[n].Left := 20;
        MyCheckBox[n].Height := 30;
        MyCheckBox[n].Width := 200;
        MyCheckBox[n].Parent := Self;
        MyCheckBox[n].Caption := chr(65+n)+'备选答案';
        MyCheckBox[n].Show;
        topic_i:=topic_i+30
      end;
  end;
  Button1.Enabled:=false;
end;
想请问高手,我想将MyCheckBox能和MyLabel的i关联起来,例如MyCheckBox_i_n这样的形式.要的结果如下:
MyLabel_1
  MyCheckBox_1_1
  MyCheckBox_1_2
  MyCheckBox_1_3
  MyCheckBox_1_4
MyLabe_2
  MyCheckBox_2_1
  MyCheckBox_2_2
  MyCheckBox_2_3
  MyCheckBox_2_4这个MyCheckBox_i_n 要怎样编写?

解决方案 »

  1.   

    还有个问题,如何获取重命名后的控件的name?
      

  2.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TLabelRecord = record
         Labels: TLabel;
         MyCheckBox: array of TCheckBox;
      end;
      TLabelsRecord = record
         MyLabel: array of TLabelRecord;
      end;  TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var 
      MyLabel:TLabelsRecord;
      i,n,topic_i:integer;
    begin
      SetLength(MyLabel.MyLabel,6);
      for i := 0 to 5 do
      begin
        MyLabel.MyLabel[i].Labels := TLabel.Create(Self);
        MyLabel.MyLabel[i].Labels.Top := topic_i;
        MyLabel.MyLabel[i].Labels.Left := 20;
        MyLabel.MyLabel[i].Labels.Height := 30;
        MyLabel.MyLabel[i].Labels.Width := 100;
        MyLabel.MyLabel[i].Labels.Parent := Self;
        MyLabel.MyLabel[i].Labels.Caption := '题目 '+inttostr(i+1);
        MyLabel.MyLabel[i].Labels.Show;
        topic_i:=topic_i+30;
        SetLength(MyLabel.MyLabel[i].MyCheckBox,4);
          for n := 0 to 3 do
          begin
            MyLabel.MyLabel[i].MyCheckBox[n] := TCheckBox.Create(Self);
            MyLabel.MyLabel[i].MyCheckBox[n].Top := topic_i ;
            MyLabel.MyLabel[i].MyCheckBox[n].Left := 20;
            MyLabel.MyLabel[i].MyCheckBox[n].Height := 30;
            MyLabel.MyLabel[i].MyCheckBox[n].Width := 200;
            MyLabel.MyLabel[i].MyCheckBox[n].Parent := Self;
            MyLabel.MyLabel[i].MyCheckBox[n].Caption := chr(65+n)+'备选答案';
            MyLabel.MyLabel[i].MyCheckBox[n].Show;
            topic_i:=topic_i+30
          end;
      end;
      Button1.Enabled:=false;
    end;end.访问时 MyLabel.MyLabel[i].MyCheckBox[n]
      

  3.   

    var
      MyLabel:array of TLabel;
      MyCheckBox:array of TCheckBox;
      i,n,topic_i:integer;begin
      topic_i:=0;
      SetLength(MyLabel,6);
      for i := 0 to 5 do
      begin
        MyLabel[i] := TLabel.Create(Self);
        MyLabel[i].Top := topic_i;
        MyLabel[i].Left := 20;
        MyLabel[i].Height := 30;
        MyLabel[i].Width := 100;
        MyLabel[i].Parent := Self;
        MyLabel[i].Caption := '题目 '+inttostr(i+1);
        MyLabel[i].Name:='MyLabel_'+inttostr(i+1);//
        memo1.Lines.Add(MyLabel[i].Name);//
        MyLabel[i].Show;
        topic_i:=topic_i+30;
        SetLength(MyCheckBox,4);
          for n := 0 to 3 do
          begin
            MyCheckBox[n] := TCheckBox.Create(Self);
            MyCheckBox[n].Top := topic_i ;
            MyCheckBox[n].Left := 20;
            MyCheckBox[n].Height := 30;
            MyCheckBox[n].Width := 200;
            MyCheckBox[n].Parent := Self;
            MyCheckBox[n].Caption := chr(65+n)+'备选答案';
            MyCheckBox[n].Name:='MyCheckBox_'+inttostr(i+1)+'_'+inttostr(n+1);//
            memo1.Lines.Add('----'+MyCheckBox[n].Name);//
            MyCheckBox[n].Show;
            topic_i:=topic_i+30
          end;
      end;
      Button1.Enabled:=false;
    end;
      

  4.   

    动态建时,指定NAME就行啦, 即 (AControl as TCheckBox).Name:= 'MyCheckBox_'+inttostr(i)+'_'+inttostr(n);
      

  5.   

    var
      i: integer;
      c: TCheckBox;
    begin
      for i:= 0 to self.ControlCount-1 do
      begin
        if self.Controls[i] is TCheckBox then
        begin
          c:= (self.Controls[i]) as TCheckBox;      if c.Checked then
          begin
            memo1.Lines.Add(c.Name);
          end;
        end;
      end;
    end;
      

  6.   

    遍历组件
    if AControl is TCheckBox then 
      AStringList.append((AControl as TCheckBox).Name)再从AStringList里一个一个用正则提取 X_X 第一个X为题,第二就为ABCD(可用Case 转成ABCD)