如何通过接受对两个列表框中可用的任何列表框的任何更改来同步两个 TListBox 对象。
======================更新============================ =========================
这个问题在第一个答案后更新
如果我们必须使用
bindingslist1.Notify(ListBox2,'');
一直在对列表框进行更改,使用 livebibnding 而不是使用的目的是什么
ListBox1.Items.Assign(ListBox2.Items );
变化无时无刻不在发生。
最佳答案
简而言之,这就是我作为 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 时,更改也会反射(reflect)到 listbox1 中,反之亦然(由于 dirBiDirectional 设置)。如果改为添加到 listbox1,则需要调用:
bindingslist1.Notify(listbox1, '');
希望这有助于您入门。
Embarcadero 也有一些很好的活绑定(bind)东西@http://docwiki.embarcadero.com/RADStudio/en/LiveBindings_in_RAD_Studio
关于delphi - Delphi xe2中的实时绑定(bind)列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8426995/