2013-01-24 26 views
3

我正在使用Delphi XE3 SP1。我創建了一個FireMonkey桌面應用程序,並在主窗體上放置了一個TSpinBox和一個TTrackBar。我現在使用Visual Livebindings連接了TSpinBox的「Value」屬性和TTrackBar。 IDE已經自動創建了一個「TLinkControlToProperty」來連接它們。當我移動TTrackBar上的滑塊時,TSpinBox中的值發生變化。但是,當我更改TSpinBox中的值時,TTrackBar的值不會更新。XE3 Visual LiveBindings:TSpinBox和TTrackBar(FireMonkey)之間的雙向連接

如何使用LiveBindings將其更改爲雙向連接?當TSpinBox的「Value」發生變化時,我的目標是更改TTrackBar的「Value」屬性。此外,我對不使用「TSpinBox」的「OnChange」事件的解決方案感興趣。這可能沒有派生出「TSpinBox」的後代?

回答

3

您必須添加通過的BindingList綁定,定義源和目標設定方向dirBiDirectional和下面的代碼添加到您的源:

procedure TForm1.SpinBox1Change(Sender: TObject); 
begin 
BindingsList1.Notify(Sender, ''); 
end; 

procedure TForm1.TrackBar1Change(Sender: TObject); 
begin 
BindingsList1.Notify(Sender, ''); 
end; 

這可以減少到

procedure TForm1.OneChangeEventForAllControlsUsingBindinglist1(Sender: TObject); 
begin 
BindingsList1.Notify(Sender, ''); 
end; 

enter image description here

+0

感謝您的回答。我應該更加明確:我對不依賴組件的「OnChange」事件的解決方案感興趣。如果我使用「OnChange」,我可能完全擺脫LiveBinding。 –

+0

我無法找到沒有代碼的雙向解決方案。對於所有的控件你只需要一個方法使用BindingsList1.Notify(Sender,'');方法TForm.OneFitsAll(Sender:TObject)用於所有ChangeEvents。 – bummi

+0

@Olaf'TSpinBox'沒有通知綁定值的變化(可能是一個bug)。您可以** a)**構建您自己的'TSpinBox',或者** b)**通過'OnChange'事件或** c使用解決方法** **在QC上報告它,並等待將要修復的更新這個。 –