问题如下:
  我有一ListBox,我想让它的一个item显示的是'abc',但选中后的值是123
   'abc'      123
请问:
  1.ListBox有这个功能吗?我记得ASP上的ListBox是直接带有这个功能的
  2.如果delphi的ListBox没有这个功能的话,那应该怎么做才能办到?
  3.有没有其他的第三方ListBox具有这个功能

解决方案 »

  1.   

    好像有人问过这个问题,不知道是不是你。
    实现起来应该不难吧,在onchange事件里编程
    如果abc和123之间有没有特定的转换关系呢
    没的话直接用if判断赋值就行
      

  2.   

    另外建立一个TStringList, 里面存放与ListBox的Items对应的值(即'123'之类的)
    var
      AListValue : TStrings;procedure TForm1.FormCreate(Sender: TObject);
    begin
      AListValue := TStringList.Create;
      ListBox1.Items.Add('abc');
      AListValue.Add('123');
      ListBox1.Items.Add('def');
      AListValue.Add('456');
      ListBox1.Items.Add('ghi');
      AListValue.Add('789');
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      AListValue.Free;
    end;procedure TForm1.ListBox1DblClick(Sender: TObject);
    begin
      if ListBox1.ItemIndex >= 0 then
        ShowMessage(AListValue.Strings[ListBox1.ItemIndex]);
    end;
      

  3.   

    To:gjw310
     
    上次不是我问我,可能这种问题大家都碰到得比较多吧
    没有特定的对应关系,都是取出数据中一张表
      A字段   B字段
      abc    123
    而且数据量有可能比较大,所以你的方法不太好用
      

  4.   

    用listview可以实现。TListItem.Data可以存储指针指向的数据。
    TMyData=record
      name: string;
      value: string;
    end;
    PMyData=^TMyData;var
      newItem: TListItem;
      lpData: PMyData;
    begin
        ...
        newItem := lvTest.Items.Add;
        New(lpData);
        lpData^.name:= 'abc';
        lpData^.value:= '123';
        newItem.Caption := lpData^.name;
        newItem.Data := lpData;
        ...
      end;取值
    var
      myData: TMyData;
      ...  myData := PMyData(lvTest.Items[i].Data)^
      

  5.   


    这样就可以
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons;type
      TForm1 = class(TForm)
        BitBtn1: TBitBtn;
        ListBox1: TListBox;
        procedure BitBtn1Click(Sender: TObject);
        procedure ListBox1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      s:^string;
    begin
      new(s);
      s^:='123';
      self.ListBox1.Items.AddObject('abc',TObject(s));
    end;procedure TForm1.ListBox1Click(Sender: TObject);
    var
      s:^string;
    begin
      s:=Pointer(ListBox1.Items.Objects[self.ListBox1.ItemIndex]);
      showmessage(s^);
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var
      IntI:Integer;
    begin
      for IntI:=self.ListBox1.Items.Count-1 downto 0 do
      begin
        Dispose(Pointer(ListBox1.Items.Objects[IntI]));
      end;
    end;end.