Tstringlist  能不能存一个 index 和一个结构体我只要通过index 找到结构体 并且做删除或添加动作

解决方案 »

  1.   

    type
      myrecord = record
      ...
      end;
      pmyrecord = ^myrecord;
    var
      rec: pmyrecord;  new(rec);
      ...
      StringList.AddObject(IntToStr(Index),TObject(rec));
      

  2.   


    TObject(Fuser) := StrList.Objects[0];
      

  3.   

    rec.cmd:=1;
      rec.pinid:=111;
      slist.AddObject('A',TObject(rec));
      str:=inttostr(PSendRec(slist.Objects[slist.IndexOf('A')]).pinid);  rec.cmd:=2;
      rec.pinid:=112;
      slist.AddObject('B',TObject(rec));
      str:=inttostr(PSendRec(slist.Objects[slist.IndexOf('A')]).pinid);
        showmessage(str);为什么 show出来的是112呢 应该是111啊
      

  4.   

    TStringList比TList好的地方是有一个字符串作为关键字索引,直接indexof就可以查出某个对象 / 结构体了,不用老是自己写FOR循环,需要看情况选择TStringList还是TList还是TObjectList。---------------------------------------rec.cmd:=1; 
    rec.pinid:=111; 
    slist.AddObject('A',TObject(rec)); 
    str:=inttostr(PSendRec(slist.Objects[slist.IndexOf('A')]).pinid); rec.cmd:=2; 
    rec.pinid:=112; 
    slist.AddObject('B',TObject(rec)); 
    str:=inttostr(PSendRec(slist.Objects[slist.IndexOf('A')]).pinid); 你添加第二个之前没有New(Rec),自然刚添加的结构体的值就被你后面一次赋值的值覆盖了
      

  5.   

    如果TStringlist每项除了自己(字符串)、objects,还能有一个字符串,就好了
    ——把本来用objects[i]记住地址的结构,直接编码为字符串,这个结构就不要了,免去了分配和释放的麻烦
      

  6.   

    StringList可以用StringList.Values['xxx'] := 'yyy'来达到双字符串的效果,只是觉得它的实现方式有点别扭而已,实际是把"xxx=yyy"这样作为一项保存在LIST里。
      

  7.   

    嗯,Tstringlist是可以了,但是ListBox/Combobox的items就不行了
    即使可以,显示出来的也是xxx=yyy,而不是:只显示xxx,但是能对应到yyy
    或者需要取=前面的xxx出来自画才行
      

  8.   

    说得没错,早期COMBOBOX可能没考虑到现在的这种KEY VALUE式的应用。RZCOMBOBOX虽然考加了个stringlist来弥补了这点,但是依然觉得实现得奇怪,不熟DELPHI的人用它没准会搞到KEY和VALUE不同步也难说。