准备用 TBindingsList 重做上一个例子.
可以先把 TBindingsList 理解为是一组绑定表达式(TBindExpression)的集合;
官方应该是提倡在设计时完成 TBindExpression 的建立与参数设置, 但我觉得看运行时的代码会更容易理解.
1、先在窗体上添加 TrackBar1、Edit1、Label1、BindingsList1;
2、激活窗体和 TrackBar1 的默认事件;
3、然后将通过代码把 TrackBar1.Value 分别绑定到 Edit1.Text、Label1.Text, (这里把 TrackBar1 做源控件, 把 Edit1、Label1 做目标控件).
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, Data.Bind.EngExt, Fmx.Bind.DBEngExt, Data.Bind.Components, FMX.Edit; type TForm1 = class(TForm) TrackBar1: TTrackBar; Edit1: TEdit; Label1: TLabel; BindingsList1: TBindingsList; procedure FormCreate(Sender: TObject); procedure TrackBar1Change(Sender: TObject); end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin {给 BindingsList1 添加表达式, 并设置参数} with TBindExpression.Create(BindingsList1) do begin ControlComponent := Edit1; //目标控件 ControlExpression := 'Text'; //目标控件属性 SourceComponent := TrackBar1; //源控件 SourceExpression := 'Value'; //源控件属性 Active := True; //激活; 可以通过 Active := False 断开绑定 end; with TBindExpression.Create(BindingsList1) do begin ControlComponent := Label1; ControlExpression := 'Text'; SourceComponent := TrackBar1; SourceExpression := 'Value'; Active := True; end; end; {在 TrackBar1 的 OnChange 中发送通知} procedure TForm1.TrackBar1Change(Sender: TObject); begin BindingsList1.Notify(Sender, ''); //这里也可以写作: BindingsList1.Notify(TrackBar1, 'Value'); end; end.
下面尝试在设计时完成以上工作:
1、先在窗体上添加 TrackBar1、Edit1、Label1;
2、从 Edit1 的右键菜单 New LiveBinding...(从 Strucure 窗口 Edit1 的右键菜单、或从 Object Inspector 窗口的 LiveBindings 添加均可);
3、确认添加 TBindingExpression, 其默认名称会是: BindExpressionEdit11, (此时也会有 BindingsList1 被自动添加);
4、选定刚刚添加的 BindExpressionEdit11, 设置属性:
5、重复步骤 2..4 同样设置 Label1ControlComponent : 'Edit1' ControlExpression: 'Text' SourceComponent : 'TrackBar1' SourceExpression : 'Value'
6、在 TrackBar1 的 OnChange 事件中写上一句: BindingsList1.Notify(Sender, '');
7、运行.
使用 System.Bindings.Helper 单元中 TBindings 类的静态方法实现如上绑定(先在窗体上添加 TrackBar1、Edit1、Label1):
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Edit; type TForm1 = class(TForm) TrackBar1: TTrackBar; Edit1: TEdit; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure TrackBar1Change(Sender: TObject); end; var Form1: TForm1; implementation {$R *.fmx} uses System.Bindings.Expression, System.Bindings.Helper; procedure TForm1.FormCreate(Sender: TObject); begin TBindings.CreateManagedBinding( [TBindings.CreateAssociationScope([Associate(TrackBar1, 'Input1')])], 'Input1.Value', [TBindings.CreateAssociationScope([Associate(Edit1, 'Output1')])], 'Output1.Text', nil ); //其中的 Input1、Output1 都是随意的, 前后一致即可 TBindings.CreateManagedBinding( [TBindings.CreateAssociationScope([Associate(TrackBar1, 'Input1')])], 'Input1.Value', [TBindings.CreateAssociationScope([Associate(Label1, 'Output1')])], 'Output1.Text', nil ); end; procedure TForm1.TrackBar1Change(Sender: TObject); begin TBindings.Notify(Sender, ''); end; end.
分类:
XE2 与 FireMonkey
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧