旧的贴子我找过了,没有找到我要的答案
我的方法是
写:
      sID := FieldByName('ID').AsString;  
      sName := FieldByName('name').AsString;
      AComboBox.Items.AddObject(sName,TObject(sID));
读:
      string(cbxName.Items.Objects[cbxName.ItemIndex])
但读的返回值是'name',并不是我写的sID的值期望您的精彩回答!

解决方案 »

  1.   

    type
      T=class
      public
        sID:stirng;
      end;var
      o:T;
      ...
      o :=T.Create;
      o.sID := FieldByName('ID').AsString
      ...
      aComboBox.Items.AddObject(sName,o);
      ...
      //o不需要释放
      
    读:
      T(aComboBox.Items.Objects[aComboBox.ItemIndex]).sID
      
      

  2.   

    同时我有一个问题,关于COM 和 TApplication,请给点建议
    http://expert.csdn.net/Expert/topic/1196/1196971.xml?temp=.5505182
      

  3.   

    我试过了,如果在写的时候sID是常量,则读取的时候就没有问题,是不是Delphi的Bug?可恶!
    我原来用的就是一个记录来保存这些信息,感觉addobject方法很好,而且当ID是整形时也没问题,头疼!
    高手支招!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  4.   

    string(cbxName.Items.Objects[cbxName.ItemIndex])
    提示“Invalid typecast”
    上面语句怎么写?
      

  5.   

    wisenowa帮忙解决了问题
    应该这样写string(pointer(cbxName.Items.Objects[cbxName.ItemIndex]))
    同时感谢各位的帮忙
      

  6.   

    string(cbxName.Items.Objects[cbxName.ItemIndex])是可以用的,Integer(cbxName.Items.Objects[cbxName.ItemIndex])也是可以用的var
      sID:string;
      ...
      sID := 'ID';  
      AComboBox.Items.AddObject('Name',TObject(sID));
      string(cbxName.Items.Objects[cbxName.ItemIndex])
      是可以用的,但是,delphi 会默认地释放cbxName.Items.Objects[],当Objects[]是以下类型时都没什么问题 LString,WString,Variant,Array,Record,Interface(Object),DynArray(参见system.pas)  当Objects是Record时,
         代码是这样的 .AddObject(...,@R)  AddObject(...,R)编译时通不过的,实际上Objects[...]是一个地址,所以当R是局部变量时就会出现问题。当在R释放之前访问Objects[...]是没有问题的。(读 var  R:^TR;  R := Pointer( .Objects[...]);)
    同时在释放R后,将R置nil,否则同样可能有问题。如还有其他的问题,可一联系我: MSN :[email protected]  
      

  7.   

    感谢六月雪的精彩回答,收获颇丰
    也就是说TObject是一个指针类型,如果没有创建则不能被外部引用,除非是整形。我做过试验好像只有整形可以,字符性也不可以