[delphi]ComboBox实现显示文本与值不同的方法

在html的select下拉框标签里,option选项可以单独设置一个值,可以和显示的文本不同,但在delphi中,下拉框组件ComboBox却无法直接像它一样,赋予一个单独的值,但是我们可以通过其他方法来实现,我们先来试试比较偏门的方法。

1.通过两个ComboBox组件来实现

演示图:


procedure TForm1.FormCreate(Sender: TObject);
begin
  cbb1.items.Add('a');
  cbb1.Items.Add('b');
  cbb2.Items.Add('1');
  cbb2.Items.Add('2');
//  cbb2.Visible := False;
end;

procedure TForm1.cbb1Select(Sender: TObject);
var
  selecti: Integer;
begin
  selecti := cbb1.ItemIndex;
  cbb2.ItemIndex := selecti;
  mmo1.Text := '文字为:' + cbb1.Items[selecti] + ' 值为:' + cbb2.Items[selecti];
end;

在实际应用的时候,隐藏掉用于保存值的内容的combobox即可。

2.使用tstringlist或者数组来保存值

这种方法实际上跟用2个Combobox类似,只是效率上应该更高,因为使用了更少的界面控件。

var
  list: TStringList;

procedure TForm1.FormCreate(Sender: TObject);
begin
  list := TStringList.Create;
  cbb1.items.Add('a');
  cbb1.Items.Add('b');
  list.Add('1');
  list.Add('2');
end;

procedure TForm1.cbb1Select(Sender: TObject);
var
  selecti: Integer;
begin
  selecti := cbb1.ItemIndex;
  mmo1.Text := '文字为:' + cbb1.Items[selecti] + ' 值为:' + list.Strings[selecti];
end;

以上方法可以说是相对偏一些,我是基于一些网友提供的想法来实现的,另外其实还可以直接使用Combobox本身的东西来实现,这个感觉上更正宗一点,也不需要用到’额外'的控件了。

使用Combobox提供的AddItem的方法:

procedure AddItem(Item: String; AObject: TObject);
Item:添加项的字符串值。
AObject:关联的对象。

AddItem方法添加项目,并同时与AObject对象进行关联,并可以读取、修改被关联对象,这里我们就利用它这一特性,把项目的真实值给关联到每一个项去,就实现了显示内容与值的不同了。

procedure TForm1.FormCreate(Sender: TObject);
var
  classid: TStrings;
  i: Integer;
begin
  classid := TStringList.Create;
  classid.LoadFromFile('d:\document\desktop\classid.txt');
  for i:=0 to classid.Count -1 do
  begin
    //添加项,关联值
    cbb1.AddItem(classid.ValueFromIndex[i], TObject(StrToInt(classid.Names[i])));
  end;
  classid.Free;
end;

procedure TForm1.cbb1Select(Sender: TObject);
begin
  edt1.Text := IntToStr(Integer(cbb1.Items.Objects[cbb1.ItemIndex]));
  edt2.Text := cbb1.Items[cbb1.itemIndex];
end;

classid.txt的部分内容为:

11=电脑硬件/显示器/电脑周边
1101=笔记本电脑
1201=MP3/MP4/iPod/录音笔

效果演示:



  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值