2017-09-26 11 views
0

列挙子を使用して、キーと値のペアでコンボボックスを設定したいと考えています。そのキーをユーザーから隠し、値だけを表示することが重要です。選択すると、選択した値に関連付けられたキーを取得したいと思います。Delphi 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は[「キーは」]cboUserList上でユーザに表示される値 currentObj.S [「値」]の選択ユーザに捕捉なければなりませんドロップダウンリスト。

アイデア?

+4

GUIコントロールは、あなたのプログラムのデータ構造を管理しないでください。 –

答えて

2

シンプルなクロスプラットフォームソリューションはkey Sを保持するために別のTStringListを用いることであろうこれらのオブジェクトを破壊することを確認してください

procedure TForm2.ComboBox1Change(Sender: TObject); 
begin 
    Caption := (ComboBox1.Items.Objects[ComboBox1.ItemIndex] as TKey).S; 
end; 

としてアクセス、 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

キーをラップすることができます。その後、

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; 

そして、ちょうど後で

+2

私はビジュアルコンポーネントをビジネスロジックの一部として使用しないでください。 –

関連する問題