zoukankan      html  css  js  c++  java
  • [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/录音笔


    效果演示:



  • 相关阅读:
    1202诗人基本介绍&诗人画像
    1205人物关系优化&诗人轨迹
    把SQL Server 2000 表中的自动编号Id重新开始排列
    一个一直都不明白的东西今天知道了。关于sqlserver2000自动执行。
    服装打版界的扛把子ET自定义操作
    手把手教你搭建集中式版本控制系统SVN服务器
    分享一次实用的爬虫经验
    盘点CSV文件在Excel中打开后乱码问题的两种处理方法
    盘点服装设计所经常性使用的软件ET(下篇)
    sql 每个企业选择一条产品
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3095785.html
Copyright © 2011-2022 走看看