ComboBox中的键/值对使用Delphi Firemonkey

时间:2017-09-26 05:37:47

标签: delphi combobox firemonkey

我想使用枚举器来填充具有键/值对的Combobox。重要的是我隐藏用户的密钥并仅显示值。在选择时,我想捕获与所选值相关联的键。

代码与此类似。

var
    currentObj: ISuperObject; 
    enum: TSuperEnumerator<IJSONAncestor>;

    while enum.MoveNext do
    begin

        currentObj := enum.Current.AsObject;
        cboUserList.Items.Add(currentObj.S['key'],currentObj.S['value']);

    end;

currentObj.S [&#39; key&#39;] 应在用户选择值时捕获 currentObj.S [&#39;值&#39;] ,用户可在 cboUserList 下拉列表中看到。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

一个简单的跨平台解决方案是使用单独的TStringList来保存key,然后在ComboBox中显示value并使用其项目索引来访问TStringList个项目。

var
  currentObj: ISuperObject;
  enum: TSuperEnumerator<IJSONAncestor>;

while enum.MoveNext do
begin
  currentObj := enum.Current.AsObject;
  userSL.Add(currentObj.S['key']);
  cboUserList.Items.Add(currentObj.S['value']);
end;

var
  index: Integer;
  key: string;
begin
  index := cboUserList.ItemIndex;
  key := userSL[index];
 ... 
end;

答案 1 :(得分:1)

您可以将您的密钥包装在课堂上,例如

type
  TKey = class
    S: string;
    constructor Create(const AStr: string);
  end;

constructor TKey.Create(const AStr: string);
begin
  S := AStr;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  ComboBox1.Items.AddObject('value', TKey.Create('key'));
end;

然后以

的形式访问它
procedure TForm2.ComboBox1Change(Sender: TObject);
begin
  Caption := (ComboBox1.Items.Objects[ComboBox1.ItemIndex] as TKey).S;
end;

请确保稍后销毁这些对象