問題タブ [livebindings]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
358 参照

delphi - TComboBox へのプログラムによる変更を LiveBinding とうまく連携させるにはどうすればよいですか?

2 つのコンボ ボックスを持つフォームがあり、どちらにも同じ項目リストが含まれており、互いに完全に同期する必要があります。(これらは、 の 2 つの異なるタブにある同じオプションのリストを表しますTPageControl。)

これを機能させるために、LiveBinding をセットアップして、両方のコントロールを ClientDataset の同じフィールドにバインドします。ClientDataset は、このフォーム上のコントロールの同期を維持するためだけに存在します。MyTBindingsListにはTLinkControlToField両方のコンボ ボックスがあり、両方を同じフィールドにリンクしています。

GUI 内ですべての変更を行う限り、すべて正常に動作します。

ただし、関係のないアクションによってボックスの 1 つの選択状態が変更されると、それらは同期しなくなります。

この時点の後、何らかの理由でcboMainValue、期待されるテキストが表示されますが、cboAltValue空白のままです (つまりItemIndex = -1)。

Textではなくプロパティを設定ItemIndexし、ClientDataset のバッキング フィールドの値を編集しようとしましたが、いずれも異なる結果を生成しません。

1 つのコンボ ボックスの状態をプログラムで変更し、それに合わせて LiveBinding を他のコンボ ボックスに更新させる方法を知っている人はいますか?

0 投票する
1 に答える
1027 参照

delphi - Delphi - 列挙型の項目を ComboBox にバインドし、選択した項目をオブジェクトにバインドする方法

いくつかのカスタム Enumerator-Set を作成しました。

例:

ここで、セットで定義されたすべてのアイテムでコンボボックスを埋めたいと思います。したがって、私の最初の考えは、TypeInfo、GetEnumName、および GetEnumValue-Functions を使用することでした。

(別のアダプタを使用して TStringList を ComboBox にバインドしようとしましたが、うまくいきませんでした)。

ComboBox を埋めた後、LiveBindings を使用してプロパティ「SelectedValue」を、単に Status と呼ばれるオブジェクトの TStatus プロパティにバインドしました。

ただし、3 つの問題があります。

  1. Status プロパティにデフォルト値を割り当てたにもかかわらず、オブジェクトをスクロールするとコンボボックスに値が表示されません。

  2. コンボボックス内のアイテムの量は次のとおりです。

    したがって、2 つのオブジェクトがある場合、コンボボックスには 6 つのアイテムがあり、4 のままにしておく必要があります。

  3. コンボボックスから値を選択し、それをオブジェクトにポストしたい場合、それは私のセッター関数にアクセスしません。

この Live Bindings 全体は、私にとってはまだ新しいものですが、きちんと学びたいと思っています。

したがって、これらの問題を解決するのを手伝っていただければ幸いです。

お時間をいただきありがとうございます。

編集: 私の Delphi バージョンは 10.1 ベルリンで、VCL を使用しています。ターゲット プラットフォームは Windows のみです。

Edit2: https://www.dropbox.com/s/u7znetur723q6i2/DBApp.7z?dl=0 ここに私のプロジェクト ファイルがあります。