天天看點

[delphi]ComboBox實作顯示文本與值不同的方法

在html的select下拉框标簽裡,option選項可以單獨設定一個值,可以和顯示的文本不同,但在delphi中,下拉框元件ComboBox卻無法直接像它一樣,賦予一個單獨的值,但是我們可以通過其他方法來實作,我們先來試試比較偏門的方法。

1.通過兩個ComboBox元件來實作

示範圖:

[delphi]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/錄音筆
           

效果示範:

[delphi]ComboBox實作顯示文本與值不同的方法

繼續閱讀