基本相同的代码,怎么有一个就不对呢;
不出错的代码:
  for i := 1 to 15 do
  begin
    comp_ck_name := 'ck';
    comp_ck_name :=comp_ck_name + inttostr(i);
    comp_ck := FindComponent(comp_ck_name);
    TcheckBox(comp_ck).Checked := true;  
  end;
出错的代码:
 for j := 1 to i do
  begin
    comp_ck_name := 'ck';
    k := Fid_array[j];//Fid_array[j]中存放的也是整形值,而且是不超出控件数目的范围的;
    comp_ck_name :=comp_ck_name + inttostr(Fid_array[k]);
    comp_ck := FindComponent(comp_ck_name);
    TcheckBox(comp_ck).Checked := true;
  end;
我是想动态的对相应的控件设置属性的,但这样就是错,也不知怎么回事,真急人;

解决方案 »

  1.   

    comp_ck_name :=comp_ck_name + inttostr(Fid_array[k]);
        comp_ck := FindComponent(comp_ck_name);
    if Assigned(comp_ck) and(comp_ck is TCheckbox) then //加这个试试
        TcheckBox(comp_ck).Checked := true;
      

  2.   

    for j := 1 to i do
      begin     ////////试试看看
        if j>=(length(Fid_array)) then 
          break;
        comp_ck_name := 'ck';
        k := Fid_array[j];//Fid_array[j]中存放的也是整形值,而且是不超出控件数目的范围的;
        comp_ck_name :=comp_ck_name + inttostr(Fid_array[k]);
        comp_ck := FindComponent(comp_ck_name);
        TcheckBox(comp_ck).Checked := true;
      end;
      

  3.   

    to :CoolSlob() ,加了这个语句后,不报错了,但是循环也进不去了;
      

  4.   

    不对不对,可以的;但是我想问一下,为什么要加这一句呢?我以前也这样用过的啊,没错;怎么这此就不对了?(我的checkbox是放在一个groupbox里面的,以前也是的)
      

  5.   

    comp_ck := FindComponent('一个不存在的控件名'); //comp_ck=nil
    操作nil指针当然出错
    以前对是因为'ck1'~'ck15'的控件都存在
    删除其中任意一个当然就有问题了
      

  6.   

    你的代码中有   k := Fid_array[j] 后面又出了这个 Fid_array[k]
    是不是应是Fid_array[J]呀!