いくつかのカスタム Enumerator-Set を作成しました。
例:
Type TStatus=(Unknown=0, Dead=1, Owned=2, Borrowed=3);
ここで、セットで定義されたすべてのアイテムでコンボボックスを埋めたいと思います。したがって、私の最初の考えは、TypeInfo、GetEnumName、および GetEnumValue-Functions を使用することでした。
i:=0;
while GetEnumValue(TypeInfo(TStatus),GetEnumName(TypeInfo(TStatus),i))<>-1 do
begin
status:=GetEnumName(TypeInfo(TStatus),i);
ComboBox.Items.Add(status);
inc(i);
end;
(別のアダプタを使用して TStringList を ComboBox にバインドしようとしましたが、うまくいきませんでした)。
ComboBox を埋めた後、LiveBindings を使用してプロパティ「SelectedValue」を、単に Status と呼ばれるオブジェクトの TStatus プロパティにバインドしました。
property Status:String read GetStatus write SetStatus;
ただし、3 つの問題があります。
Status プロパティにデフォルト値を割り当てたにもかかわらず、オブジェクトをスクロールするとコンボボックスに値が表示されません。
コンボボックス内のアイテムの量は次のとおりです。
Amount of Items in Set + Amount of Objects
したがって、2 つのオブジェクトがある場合、コンボボックスには 6 つのアイテムがあり、4 のままにしておく必要があります。
コンボボックスから値を選択し、それをオブジェクトにポストしたい場合、それは私のセッター関数にアクセスしません。
この Live Bindings 全体は、私にとってはまだ新しいものですが、きちんと学びたいと思っています。
したがって、これらの問題を解決するのを手伝っていただければ幸いです。
お時間をいただきありがとうございます。
編集: 私の Delphi バージョンは 10.1 ベルリンで、VCL を使用しています。ターゲット プラットフォームは Windows のみです。
Edit2: https://www.dropbox.com/s/u7znetur723q6i2/DBApp.7z?dl=0 ここに私のプロジェクト ファイルがあります。