可以使用AddObject(str1,TObject(str2))吗?解决思路

可以使用AddObject(str1,TObject(str2))吗?
在网上查到相关的资料,如果把ID,CAPTION加入到ComboBox中,可以采用 ComboBox1.Item.AddObject(ID, TObject(CAPTION))方式操作.但是如果使用下面的代码showmessage(String(ComboBox1.Items.Objects[ComboBox1.ItemIndex]))
我却获取不到CAPTION值.或者是空值,或者出现错误提示.

为了解决问题,自定义了一个的类:

  type  
  TInfo = class(TObject)
  ID:String;
  end;
然后加入代码改为: 
   
  AInfo := TInfo.Create;
  AInfo.ID := 'xxxx';
  ComboBox1.Items.AddObject(ID, AInfo);
上面三行代码放到一个循环体内.

获得所选的ID值
  showmessage(TInfo(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).ID)
这种方式可以获得所选的ID值.

不过由于加入了对象,还需要释放它们.
在FORM的OnDestroy中加入:

  for i := 0 to ComboBox1.Items.Count - 1 do ComboBox1.Items.Objects[i].Destroy;

我现在想问, ComboBox1.Items.AddObject(str1, TObject(Str2)) 这种方式可行不?

------解决方案--------------------
不可行,除非Str2是全局的
------解决方案--------------------
var
 sList:TStringList;

 //添加值
 ComboBox1.Items.Clear;
 sList:=TStringList.Create;
 slist.add('小三');
 sList.Add('小四');
 ComboBox1.Items.AddObject('小五',sList);//显示的是小五,还有小三,小四在背后

 //取值:
 slist:=TStringList(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
 showmessage(ComboBox1.Text); //小五
 showmessage(sList.Strings[0]);//小三
 showmessage(sList.Strings[1]);//小四