2

如何通过接受对两个列表框中可用的任何列表框的任何更改来同步两个 TListBox 对象。

======================更新============================ ========================= 这个问题在第一次回答后更新

如果我们必须使用

bindingslist1.Notify(ListBox2,''); 

一直在对列表框进行更改,使用 livebibnding 而不是使用的目的是什么

ListBox1.Items.Assign(ListBox2.Items ); 

变化无时无刻不在发生。

4

1 回答 1

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

于 2011-12-08T10:35:50.723 回答