首先自已定义了一个类,结构如下:
  TSelectValue = class
    name : string;
    value : string;
    end;然后在页面上放了个ComboBox1,在FormShow事件里有如下代码:
procedure TForm1.FormShow(Sender: TObject);
var select : TSelectValue;
begin
  select := TSelectValue.Create;
  select.name := 'aaa';
  select.value := '1';
  ComboBox1.Items.AddObject(select.name,Select);
  select.name := 'bbb';
  select.value := '2';
  ComboBox1.Items.AddObject(select.name,Select);
end;在ComboBox1的OnChange事件中加入以下代码:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  showmessage(TSelectValue(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).value+ ' ' + TSelectValue(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).name);
end;
问题:为什么在ComboBox选项上不管选aaa还是bbb,显示出来的结果始终是最后一条呢??高手帮帮我!

解决方案 »

  1.   

    你最后一个object select的值就是'bbb'和'2'啊
      

  2.   

    你可以定义一个TSelectValue的数组
      

  3.   

    我在ComboBox1的OnChange事件中不是写有代码,是需要showmessage我所选择的那个项的value和name啊!
    这样写就算我选择的是aaa,显示出来的还是bbb啊?为什么没改变呢?
      

  4.   

    你显示的是TSelectValue类的对象信息,你就定义了一个对象,而且最后他的信息就是bbb和2,明白否?
    procedure TForm1.FormShow(Sender: TObject);
    var select1,select2 : TSelectValue;
    begin
      select1 := TSelectValue.Create;
      select2 := TSelectValue.Create;
      select1.name := 'aaa';
      select1.value := '1';
      ComboBox1.Items.AddObject(select1.name,Select1);
      select2.name := 'bbb';
      select2.value := '2';
      ComboBox1.Items.AddObject(select2.name,Select2);
    end;
    这样试试就明白了。
      

  5.   

    明白了,那怎么来解决这个问题呢?定义成一个数组,然后根据所选择的itemindx来确定是数据里面的哪一项吗?
      

  6.   

    晕,取还是按照你的方法就可以
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      showmessage(TSelectValue(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).value+ ' ' + TSelectValue(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).name);
    end;
      

  7.   

    问题解决拉,谢谢xixuemao(从哪里跌倒就要从哪里抬出去),马上结贴
      

  8.   

    不可能吧,我现在代码:
    procedure TForm1.FormShow(Sender: TObject);
    //var select,select2 : TSelectValue;
    var sel : array of TSelectValue;
    begin
      setlength(sel,2);
      sel[0] := TSelectValue.Create;
      sel[1] := TSelectValue.Create;
      sel[0].value := '1';
      sel[0].name := 'aaa';
      sel[1].value := '2';
      sel[1].name := 'bb';
      ComboBox1.Items.Clear;
      ComboBox1.AddItem(sel[0].name,sel[0]);
      ComboBox1.AddItem(sel[1].name,sel[1]);
      {select := TSelectValue.Create;
      select2 := TSelectValue.Create;
      select.name := 'aaa';
      select.value := '1';
      ComboBox1.Items.AddObject(select.name,select);
      select2.name := 'bbb';
      select2.value := '2';
      ComboBox1.Items.AddObject(select2.name,Select);}
    end;这样写是可以的,原来的方法还是不行,我试过的!