请问以下代码有没有问题呢?其中ad是一个数据集,cb是一个combobox。目前的现象是,show出来的不是对应项的id。procedure TForm1.RzButton1Click(Sender: TObject);
begin
  cb.Clear;
  ad.First;
  while not ad.Eof do
  begin
    cb.Items.AddObject(ad.fieldbyname('name').AsString,
      tobject(integer(pchar(ad.FieldByName('id').AsString))));
    ad.Next;
  end;
  cb.ItemIndex := 0;
end;procedure TForm1.RzButton2Click(Sender: TObject);
begin
  showmessage(pchar(cb.items.objects[cb.itemindex]));
end;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:Integer;
      s:^string;
    begin
      for i:=0 to 10 do
      begin
        new( s );
        s^:=InttoStr( i );
        cb.Items.AddObject(s^,tobject(s));
      end;
    end;procedure TForm1.cbChange(Sender: TObject);
    var
      s:^string;
    begin
      s:=Pointer(cb.items.objects[cb.itemindex]);
      showmessage(s^);
    end;
      

  2.   

    谢谢,可以了。我之前也考虑过是不是要先new的问题,不过这样的话,那些字符串指针是不是都得自己手动释放呢?还是会自动管理的。
      

  3.   

    在form onclose的时候dispose掉 自己处理一下
      

  4.   

    最后想请教下大家平时是不是都是用这种方法来处理代码的问题呢?还是用LookupComboBox呢?或者其它?
      

  5.   

    这种方法肯定是比LookupComboBox要快的
      

  6.   

    你那个不知道是不是,showmessage参数要传string类型的问题,我试了三种方法都可以的
      S: String;
    begin
       s:= 'object';
      ComboBox1.AddItem('sdfsdf', Tobject(integer(Pchar(s))));
      showmessage(String(Pchar(Integer(ComboBox1.Items.Objects[0]))));
    end;   s:= 'object';
      ComboBox1.AddItem('sdfsdf', Tobject(Pchar(s)));
      showmessage(String(Pchar(ComboBox1.Items.Objects[0])));
       s:= 'object';
      ComboBox1.AddItem('sdfsdf', Tobject(integer(Pchar(s))));
      showmessage(Pchar(integer(ComboBox1.Items.Objects[0])));
      

  7.   

    to 楼上:
    add完马上show是没问题的,但是add完一堆再show好像会有问题,你试试啦。