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

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

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

演示图:


[delphi]  view plain copy print ?
  1. procedure TForm1.FormCreate(Sender: TObject);  
  2. begin  
  3.   cbb1.items.Add('a');  
  4.   cbb1.Items.Add('b');  
  5.   cbb2.Items.Add('1');  
  6.   cbb2.Items.Add('2');  
  7. //  cbb2.Visible := False;  
  8. end;  
  9.   
  10. procedure TForm1.cbb1Select(Sender: TObject);  
  11. var  
  12.   selecti: Integer;  
  13. begin  
  14.   selecti := cbb1.ItemIndex;  
  15.   cbb2.ItemIndex := selecti;  
  16.   mmo1.Text := '文字为:' + cbb1.Items[selecti] + ' 值为:' + cbb2.Items[selecti];  
  17. end;  

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

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

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

[delphi]  view plain copy print ?
  1. var  
  2.   list: TStringList;  
  3.   
  4. procedure TForm1.FormCreate(Sender: TObject);  
  5. begin  
  6.   list := TStringList.Create;  
  7.   cbb1.items.Add('a');  
  8.   cbb1.Items.Add('b');  
  9.   list.Add('1');  
  10.   list.Add('2');  
  11. end;  
  12.   
  13. procedure TForm1.cbb1Select(Sender: TObject);  
  14. var  
  15.   selecti: Integer;  
  16. begin  
  17.   selecti := cbb1.ItemIndex;  
  18.   mmo1.Text := '文字为:' + cbb1.Items[selecti] + ' 值为:' + list.Strings[selecti];  
  19. end;  

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

使用Combobox提供的AddItem的方法:

[delphi]  view plain copy print ?
  1. procedure AddItem(Item: String; AObject: TObject);  
Item:添加项的字符串值。
AObject:关联的对象。

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

[delphi]  view plain copy print ?
  1. procedure TForm1.FormCreate(Sender: TObject);  
  2. var  
  3.   classid: TStrings;  
  4.   i: Integer;  
  5. begin  
  6.   classid := TStringList.Create;  
  7.   classid.LoadFromFile('d:\document\desktop\classid.txt');  
  8.   for i:=0 to classid.Count -1 do  
  9.   begin  
  10.     //添加项,关联值  
  11.     cbb1.AddItem(classid.ValueFromIndex[i], TObject(StrToInt(classid.Names[i])));  
  12.   end;  
  13.   classid.Free;  
  14. end;  
  15.   
  16. procedure TForm1.cbb1Select(Sender: TObject);  
  17. begin  
  18.   edt1.Text := IntToStr(Integer(cbb1.Items.Objects[cbb1.ItemIndex]));  
  19.   edt2.Text := cbb1.Items[cbb1.itemIndex];  
  20. end;  

classid.txt的部分内容为:

[plain]  view plain copy print ?
  1. 11=电脑硬件/显示器/电脑周边  
  2. 1101=笔记本电脑  
  3. 1201=MP3/MP4/iPod/录音笔  

效果演示:



  • 0
    点赞
  • 2
    收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值