如何通过接受列表框中可用的任何列表框上的任何更改来同步两个TListBox对象。
=====================更新========================= =========================== 这个问题在第一个答案后更新
如果我们必须使用
bindingslist1.Notify(ListBox2,'');
一直在对列表框进行更改,使用livebibnding而不是使用
的目的是什么ListBox1.Items.Assign(ListBox2.Items );
一直发生变化。
答案 0 :(得分:2)
简而言之,这是我作为firemonkey应用程序执行此操作的方式,同样适用于vcl我猜:
创建一个新的firemonkey HD应用程序
添加两个列表框 添加编辑和按钮(输入数据)
Listbox1 - >生物绑定 - >新的生物绑定 - > 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还有一些很好的实时绑定内容@ http://docwiki.embarcadero.com/RADStudio/en/LiveBindings_in_RAD_Studio