我有一个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提供)。
答案 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;