如何添加'隐藏' TComboBox中的项目?

时间:2015-06-19 10:50:24

标签: delphi

我有一个TCombobox,其中我向用户显示了一些项目。但是我向用户显示的项目的文本与我需要的文本不同。

例如组合框项目以及我实际需要的文字是:

Entry start    ->  cmd_estart
Entry End      ->  cmd_eend

'命令'当用户点击第一个项目时我需要的是cmd_estart'。有一种方法可以将第二个项目列表放入组合框中吗?

换句话说,我需要另一个项目列表,在' parallel'使用已存在的项目列表的原始列表。

我希望已经有类似的东西:)所以,如果您知道这样的控件,请发布一个链接。

注意:这不是How to create a combobox with two columns (one hidden) in Delphi 7?的副本,因为该问题询问如何在组合框中显示两列。并且提供的解决方案不如此处提供的解决方案(由TLama提供)。

1 个答案:

答案 0 :(得分:0)

我提出了这个解决方案。如果你需要对列表进行排序,它就不会工作(我不会)。 TLama提供的解决方案更好。请投票给他答案。

TYPE
  TDualComboBox = class(TComboBox)
   private
    FDItems: TStrings;      { Strings are separated with ##}
    function getDItems: TStrings;
    procedure setDItems  (const DualItems: TStrings);
   protected
   public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
    procedure AddDualItem(const DualItem: String);
    function  SelectedDualItem: string;
    property  DualItems: TStrings read getDItems write setDItems; { Strings are separated with ##}
   published
   end;

procedure Register;

IMPLEMENTATION

Constructor TDualComboBox.Create(AOwner : TComponent);
begin
 inherited Create(AOwner);
 FDItems:= TStringList.Create;
end;


destructor TDualComboBox.Destroy;
begin
 FreeAndNil(FDItems);
 inherited;
end;



procedure TDualComboBox.AddDualItem(CONST DualItem: String);
VAR
   sField, sValue: string;
begin
 SplitString(DualItem, '##', sField, sValue);
 Items  .Add(sField);
 FDItems.Add(sValue);
end;


function TDualComboBox.SelectedDualItem: string;
begin
 if ItemIndex < 0
 then Result:= ''
 else Result:= FDItems[ItemIndex];
end;

这是测试程序:

procedure TForm5.FormCreate(Sender: TObject);
begin
 Box:= TcComboBox.Create(Self);
 Box.Parent:= Self;
 Box.Top := 200;
 Box.Left:= 200;
 Box.OnChange:= ComboChange;

 Button1Click(Sender);
end;


procedure TForm5.Button1Click(Sender: TObject);
begin
 Box.AddDualItem('User nice text##usr_bkg_text');
end;


procedure TForm5.ComboChange(Sender: TObject);
begin
 lblInfo.Caption:= Box.SelectedDualItem;
end;