var TempStr:string;TempStr:='嘿嘿!'
listbox.Items.AddObject('哈哈哈哈哈',TObject(TempStr));双击listbox中的“哈哈哈哈哈”
showmessage(String(listbox.Items.Objects[listbox.ItemIndex]));
运行成功!显示“嘿嘿!”
但是同样方法
TempStr:= ADOQurey.fields[1].asstring;
然后
listbox.Items.AddObject('哈哈哈哈哈',TObject(TempStr));
双击以后不会显示数据,却出现了乱码,这是什么原因阿???我想实现的是listbox中显示的是数据库表中的第一列
并且每个listbox中的数据都绑定该数据在数据库表中第2列的值var TempStr:string;with ADOQuery do
  begin
      Open;
      for i:=0 to RecordCount - 1 do
        begin
          TempStr:=Fields[1].AsString;
          listbox.Items.AddObject(Fields[0].AsString,TObject(TempStr));
          next;
        end;
      Close;
    end;这样不行么?什么原因?为什么listbox中的数据能显示出来(Fields[0].AsString)而他们绑定的数据(Fields[1].AsString)确是乱码?
高手帮帮忙吧~~
不考虑其他的控件(比如dblistbox和dblookuplistbox)。

解决方案 »

  1.   

    楼主,不用你那么写的麻烦这样写不是很好
    ADOQuery.close;
    ADOQuery.SQL.Text:='Select * From Table1';
    ADOQuery.Open;
    While not ADOQuery.Eof do
    begin
      ListBox.Items.Add(ADOQuery.FieldByName('字段名').AsString;)//字段名写你要显示在ListBox中的那个字段
      ADOQuery.Next;
    end;
    不就行了.
      

  2.   

    不要用ADDOBJECT,直接ADD就行了。
      

  3.   

    谢谢楼上的解答。但是这不是一个问题啊~~可能我写得太乱,楼主没看明白listbox.items.AddObject是两个参数
    不是
    listbox.items.add是一个参数我要一个绑定数据的listbox啊~
      

  4.   

    .............简单的说就是我选一个listbox中的项目,然后用他绑定的关键字b
      

  5.   

    ADOQuery.close;
    ADOQuery.SQL.Text:='Select * From Table1';
    ADOQuery.Open;
    While not ADOQuery.Eof do
    begin
      ListBox.Items.Add(ADOQuery.FieldByName('字段名').AsString;)//字段名写你要显示在ListBox中的那个字段
      ADOQuery.Next;
    end;
    不就行了.
      

  6.   

    看了一下在线帮助,写了个小测试程序,验证了在线帮助里面的一些提示说明。
    Listbox.Items.AddObject(String,Object);
    其中,Oject是属于全局的,和具体的哪个Item是无关的。所以,你想把附加的一些内容放在object是可取也是不可取。procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      i: Integer;
      obj: TObject;
    begin  adsTmp.Active := TRUE;
      adsTmp.First;
      for i:=1 to adsTmp.RecordCount do
      begin
        obj := adsTmp.FindField('ID');
        ListBox1.Items.AddObject(adsTmp['Name'],obj);
        //如果取出当前 i 之前的object,你会发现他和当前的是一样的。因为object是全局。
        adsTmp.Next;
      end;end;所以,思路应该是由obj存储另外一个字段内容对象。procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      i: Integer;
      obj: TStringList;
    begin  adsTmp.Active := TRUE;
      obj := TStringList.Create;//TStringList不能这样初始化,否则创建多次。
      adsTmp.First;
      for i:=1 to adsTmp.RecordCount do
      begin
        obj.Add(adsTmp['ID']);
        ListBox1.Items.AddObject(adsTmp['Name'],obj);
        adsTmp.Next;
      end;end;procedure TForm1.ListBox1Click(Sender: TObject);
    var
      obj: TStringList;
    begin  obj := TStringList(ListBox1.Items.Objects[ListBox1.ItemIndex]);
      showmessage(obj[ListBox1.ItemIndex]);end;