2013-01-24 4 views
3

Я использую Delphi XE3 с пакетом обновления 1 (SP1). Я создал приложение Desktop FireMonkey и сбросил TSpinBox и TTrackBar в основной форме. Теперь я подключил свойство «Значение» TSpinBox и TTrackBar с помощью Visual Livebindings. IDE автоматически создала «TLinkControlToProperty» для их подключения. Когда я перемещаю ползунок на TTrackBar, значения в TSpinBox меняются. Но когда я изменяю значение в TSpinBox, значение TTrackBar не обновляется.XE3 Visual LiveBindings: двунаправленное соединение между TSpinBox и TTrackBar (FireMonkey)

Как я могу изменить это на двунаправленное соединение с помощью LiveBindings? Моя цель - изменить свойство «Значение» TTrackBar, когда изменяется значение «Значение» TSpinBox. Кроме того, меня интересует решение, которое не использует событие OnChange для «TSpinBox». Возможно ли это, не вызывая потомок «TSpinBox»?

ответ

3

Вы должны добавить Binding через 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

Мне не удалось найти решения для двунаправленного без кода. Вам понадобится только один метод для всех ваших элементов управления. Процедура TForm.OneFitsAll (отправитель: TObject) с BindingsList1.Notify (Sender, ''); используется во всех ChangeEvents. – bummi

+0

@Olaf 'TSpinBox' не уведомлял привязки при изменении значения (возможно, ошибка). Вы можете ** a) ** создать собственный 'TSpinBox', который делает или ** b) ** использовать обходной путь с событием OnChange или ** c) ** сообщить об этом в QC и дождаться обновления, которое будет исправлено это. –