下面是我动态生成的一组控件 i:=0;                                 //创建确认单明细
  L:=32;
  T:=0;
  No:=0;
    while not DM.AqCreate.Eof do
    begin
      with FmTCheckDetail  do
      begin
        T:=T+40;
        D:=TDateTimePicker.Create(self);    //创建DataPicker;
        D.Parent:=SB;
        D.Name:='D'+inttostr(i);
        D.Left:=8;
        D.Top:=T;
        D.Width:=89;
        D.TabOrder:=No;
        No:=No+1;
        if(FmTCheck.State='New')then
          D.DateTime:=FmTCheck.D_BeginDate.DateTime+i
        else
          D.DateTime:=DM.AqCreate.fieldbyname('LineDate').AsDateTime;        M:=TMemo.Create(self);   //创建MEMO
        M.Parent:=SB;
        M.Name:='M'+inttostr(i);
        M.Left:=112;
        M.Top:=T;
        M.Width:=580;
        M.Height:=35;
        M.Text:='';
        if(FmTCheck.State='New')then
          M.Text:=DM.AqCreate.fieldbyname('Details').AsString
        else
          M.Text:=DM.AqCreate.fieldbyname('Details').AsString;
        M.TabOrder:=No;
        No:=No+1;        Cmb:=TCombobox.Create(Self);  //创建酒店
        Cmb.Parent:=SB;
        Cmb.Name:='H'+inttostr(i);
        Cmb.Left:=695;
        Cmb.Top:=T;
        Cmb.Width:=110;
        CmbInitFromTable(Cmb,'T_HotelInfo','HotelName','','');
        if(FmTCheck.State='New')then
          Cmb.Text:=''
        else
          Cmb.Text:=DM.AqCreate.fieldbyname('Hotel').AsString;
        Cmb.TabOrder:=No;
        No:=No+i;        Cmb:=TCombobox.Create(self); //创建星级
        Cmb.Parent:=SB;
        Cmb.Name:='RL'+inttostr(i);
        Cmb.Left:=810;
        Cmb.Top:=T;
        Cmb.Width:=50;
        CmbInit(Cmb,'星级');
       { CmbInitCompany(Cmb,'T_Company','Company_SingleName',GetID('T_Type','TypeID','TypeName','酒店')); }
        if(FmTCheck.State='New')then
        begin
          if RoomLevel<>'' then
          Cmb.Text:=RoomLevel
          else
          Cmb.Text:='';
        end
        else
          Cmb.Text:=DM.AqCreate.fieldbyname('HotelLevel').AsString;
        Cmb.TabOrder:=No;
        No:=No+1;        C:=TCheckBox.Create(self);     //早餐
        C.Parent:=SB;
        C.Name:='C'+inttostr(i);
        C.Left:=868;
        C.Top:=T;
        C.Width:=20;
        C.Checked:=true;
        C.Caption:='';
        C.TabOrder:=No;
        No:=No+1;
        C.Checked:=DM.AqCreate.fieldbyname('BreakFast').AsBoolean;        C:=TCheckBox.Create(self);        //中餐
        C.Parent:=SB;
        C.Name:='CC'+inttostr(i);
        C.Left:=901;
        C.Top:=T;
        C.Width:=20;
        C.Checked:=true;
        C.Caption:='';
        C.TabOrder:=No;
        No:=No+1;
        C.Checked:=DM.AqCreate.fieldbyname('Lunch').AsBoolean;        C:=TCheckBox.Create(self);   //晚餐
        C.Parent:=SB;
        C.Name:='CCC'+inttostr(i);
        C.Left:=933;
        C.Top:=T;
        C.Width:=20;
        C.Checked:=true;
        C.Caption:='';
        C.TabOrder:=No;
        No:=No+1;
        C.Checked:=DM.AqCreate.fieldbyname('Supper').AsBoolean;        Cmb:=TComboBox.Create(self);  //住宿区域
        Cmb.Parent:=SB;
        Cmb.Name:='CCCC'+inttostr(i);
        Cmb.Left:=953;
        Cmb.Top:=T;
        Cmb.Width:=50;
        Cmb.Text:='';
        CmbInit(Cmb,'住宿');
        Cmb.TabOrder:=No;
        No:=No+1;
         if(FmTCheck.State='Edit')then
          Cmb.Text:=DM.AqCreate.fieldbyname('Area').AsString
        else
          Cmb.Text:=DM.AqCreate.fieldbyname('Area').AsString;
        end;         E:=TEdit.Create(self);   //  创建景点域
        E.Parent:=SB;
        E.Name:='S'+inttostr(i);
        E.Left:=980;
        E.Top:=T;
        E.Width:=30;
        E.Text:=DM.AqCreate.fieldbyname('Sights').AsString;
        E.TabOrder:=No;
        E.Visible:=false;
        No:=No+1;
        // Showmessage(TDatetimePicker(FindComponent('D'+inttostr(i))).Name);
      i:=i+1;
      DM.AqCreate.Next;
   end;问题
我想要动态再生成控件的事件 如TCombobox控件的联动事件
比如说,我要用上面的星级行的星级TCombobox 来联动 酒店行的酒店行TCombobox下拉例表,请问这个事件如何写
或些过程如何写,请各位高手或写过些事件的帮帮忙,谢谢!

解决方案 »

  1.   

    自己定义一个过程
    procedure  mychange(Sender: TObject);//必须同ComboBox1Change(Sender: TObject)的格式一样
    begin
      ...
    end;ComboBox1.OnChange:=mychange;就可以了
      

  2.   


     Cmb.OnClick := MyCmbClick; 定义procedure MyCmbClick(Sender: TObject);procedure TmainForm.MyCmbClick(Sender: TObject);
    var   //第n个
      i : integer;
      myform:BCXZ.TBCXZZCT;
    begin
      i:= 0;
      i := TComboBox(Sender).Tag;  //判断选择的是哪个ComboBox 
      myform:=BCXZ.TBCXZZCT.Create(self.Context);
      if myform.ShowModal=Business.Forms.Controls.mrOK then
      begin
      MyEdit[i-1].Text := myform.Str_BCMC;    //在对应的Edit上写入东西
      end;
      myform.Free;
    end;
      

  3.   


    上面的给的不是太爽啦,
     myform:BCXZ.TBCXZZCT;这个是什么意思
    Business从何定义的
      

  4.   

    我要在
    procedure MyCmbClick(Sender: TObject); 
    过程中取得目前点的是那一个TComboBox,的cmb.Name
    比如说Cmb.Name:='RL'+inttostr(i); 中
    RL(X) 这个名字是多少?
      

  5.   


    MyCmb : array of TCombobox;
    ---------------------------
    SetLength(MyCmb ,30);
          for i:=0 to sum-1 do
          begin
          //动态添加TCombobox控件
            MyCmb[i] := TCombobox.Create(self);
           MyCmb[i].Name:='MyCmb'+inttostr(i);
           MyCmb[i].Text:='';
           MyCmb[i].Top:=10+i*40;
           MyCmb[i].Left:=196;
           MyCmb[i].Width:=256;
           MyCmb[i].ReadOnly := true;
           MyCmb[i].Parent:=ScrollBox1;
           MyCmb[i].Tag := i+1; //标识
            MyCmb[i].OnClick := MyCmbClick; 
          end;
    ---------------------------
    定义procedure MyCmbClick(Sender: TObject);procedure TmainForm.MyCmbClick(Sender: TObject);
    var   //第n个
      i : integer;
    begin
      i:= 0;
      i := TComboBox(Sender).Tag;  //判断选择的是哪个ComboBox 
      MyCmb[i].Text := i;    //在对应的Edit上写入东西
    end;差不多是这样吧,可能代码会有点差错,没编译过
      

  6.   

    for j:=0 to self.ScrollBox1.ControlCount-1  do
       begin
        self.ScrollBox1.Controls[0].Free;
       end;
    在创建前释放下容器