Mal eine allgemeine Frage an alle die
hier und
hier geantwortet haben:
"
Macht ihr das tatsächlich so, wenn ihr so etwas umsetzen wollt?"
und wenn ja, warum?
Irgendwie ist mir das unbegreiflich, da es sich eigentlich um ein Standardproblem handelt, somit sollte eigentlich auch eine Standardlösung vorhanden sein (und so lange gibt es die Livebindings auch nicht).
Allerdings scheinen mir alle bisherigen in den Threads genannten Lösungen doch sehr holperig zu sein.
- Informationen (die für die Anzeige nicht benötigt werden) sollen in Controls gespeichert.
- Der Code kann so nicht wiederverwendet werden und muss auch für jedes Control immer wieder neu erstellt werden
Irgendwie fehlt es (mir) hier an KISS und DRY
Die nächsten Tage wird die Frage wohl noch zur ListBox kommen ...
Mein genereller Ansatz (abgeschaut bei Marco Cantu und etwas erweitert) für so ein Control, was eine Liste darstellt (ComboBox, ListBox, ListView, StringGrid)
Delphi-Quellcode:
IGUISelectableList<T> = interface( IGUIBaseInterface )
['{EEFE5C52-94C3-464B-80F2-05E443B0F0F6}']
procedure SetText( const Value : String );
function GetText : String;
procedure SetValue( const Value : T );
function GetValue : T;
function IsSelected : Boolean;
function GetSelected : ISSKeyValue<T>;
procedure AddPair( const AKey : T; const AValue : String ); overload;
procedure AddPair( const AKey : T; const AValue : String; SubValues : array of string ); overload;
procedure AddPair( const AKey : T; const AValue : String; const SubValues : TStrings ); overload;
procedure Clear;
procedure SetList( const AValueList : TSSKeyValues<T> );
end;
Im Anhang ein komplettes Projekt mit den Sourcen und EXE.
Die Auswahlliste wird mit TComboBox, TListBox, TListView dargestellt und die Füll-Methode und Auslese-Methode ist in allen Fällen gleich.