2011-12-08 41 views
2

如何同步兩個TListBox對象,方法是接受任何列表框中的任何更改,使其在列表框中可用。Delphi中的Livebinding列表框xe2

=====================更新======================== ============================ 這個問題是第一次的答案後更新

如果我們不得不使用

bindingslist1.Notify(ListBox2,''); 

都做了改變列表框的時候,什麼是具有livebibnding,而不是使用

ListBox1.Items.Assign(ListBox2.Items); 

的改變發生的所有時間的目的。

+0

,請通知我,如果我要在一個錯誤的情況下使用livebinding – VibeeshanRC

回答

2

總之這是我這究竟是怎麼爲firemonkey應用,同應與VCL工作,我想:

創建一個新的firemonkey HD應用

添加兩個列表框 添加編輯和一個按鈕(輸入數據)

ListBox1中 - > Livebindings - >新Livebinding - > TBindExpression

通過BindingsList1名稱的新組件自動添加到形式

編輯新bindexpression屬性(BindExpressionListBox11對我來說)

Direction = DirBiDirectional 
Managed = true 
NotifyOutputs = true 
ControlExpression = Items 
SourceExpression = Items 

創建ButtonClick事件(或者你可以把它放在而是調用onChanged因爲某些原因加入項目時不會被調用。它被調用,如果你選擇的列表上的東西):

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    listbox2.Items.Add(edit1.Text); 
    bindingslist1.Notify(listbox2, ''); 
end; 

現在,只要你加入listbox2變化的項目被反射到ListBox1的藏漢,反之亦然(由於dirBiDirectional設置)。如果添加到listbox1,您需要撥打:

bindingslist1.Notify(listbox1, ''); 

希望這可以幫助您入門。

Embarcadero公司也有一些很好的東西livebinding @http://docwiki.embarcadero.com/RADStudio/en/LiveBindings_in_RAD_Studio

+1

感謝您的回答,但如果我想打電話通知(ListBox1中,「」 );總是我改變,那麼有什麼活動綁定的目的,而不是手動 – VibeeshanRC

+0

根據我的帖子中的鏈接,使用Managed = true和NotifyOutputs = true應該自動執行此操作,但它似乎不工作我至少。至於鏈接的使用建議:'通常,事件處理程序的發件人參數用於調用BindingsList1.Notify(發件人,'');.通過這種方式,您可以使用一個事件處理程序來處理來自許多控件的通知。 「 – egmolio