procedure TStockForm.FormCreate(Sender: TObject);
var i,j:Integer;
    str1:string;
begin//**********************设置规格模块************************
  str1:='select * from rule order by rnum';
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add(str1);
  adoquery1.Open;
  adoquery1.First;
  j:=0;
  for i:=0 to adoquery1.RecordCount-1 do
  begin
    RuleCheckbox[i]:=Tcheckbox.Create(Self);
    RuleCheckbox[i].Parent:=panel1;
    RuleCheckbox[i].Left:=10+j*60;
    if ((i+1) mod 3)=0 then
      j:=0
    else
      j:=j+1;
    RuleCheckbox[i].Top:=4+(i div 3)*20;
    RuleCheckbox[i].Width:=50;
    RuleCheckbox[i].caption:=adoquery1.Fields[1].Value;
    rulecheckbox[i].OnClick:=rulecheckboxclick(1);
    RuleEdit[i]:=Tedit.Create(Self);
    RuleEdit[i].Parent:=panel1;
    RuleEdit[i].Left:=10+j*70;
    if ((i+1) mod 3)=0 then
      j:=0
    else
      j:=j+1;
    RuleEdit[i].Top:=4+(i div 3)*20;
    RuleEdit[i].Width:=50;
    RuleEdit[i].Visible:=false;    adoquery1.Next;
  end;
end;就是不知道激活checkbox后如何显示后面的edit控件
静态控件时,是直接在checkbox的onclick事件中写这些代码就行:
procedure TStockForm.CheckBox1Click(Sender: TObject);
begin
  Edit2.Text:='';
  Edit2.Visible:=checkbox1.Checked;
end;但现在是动态调用数据库中的值就不知道在哪写值了

解决方案 »

  1.   

    在RuleEdit[i].Visible:=false;下面加入如下语句
    RuleCheckbox[i].tag:=Integer(RuleEdit[i]);事件处理函数改为
      if not (Sender is TCheckBox) then Exit;
      if (Sender is TCheckBox).Tag = 0 then Exit;
      TEdit((Sender as TCheckBox).Tag).Text:='';
      TEdit((Sender as TCheckBox).Tag).Visible:=(Sender as TCheckBox).Checked;
      

  2.   

    wxieyang(斜阳) ( ) 不需要这么麻烦的直接用  RuleCheckbox[i].tag = i就可以了