Delphi XE2 之 FireMonkey 入门(23) - 数据绑定: TBindingsList: TBindExpression
2024-09-05 20:00:58
准备用 TBindingsList 重做上一个例子.
下面尝试在设计时完成以上工作:
使用 System.Bindings.Helper 单元中 TBindings 类的静态方法实现如上绑定(先在窗体上添加 TrackBar1、Edit1、Label1):
可以先把 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, 设置属性:
ControlComponent : 'Edit1'
ControlExpression: 'Text'
SourceComponent : 'TrackBar1'
SourceExpression : 'Value'
5、重复步骤 2..4 同样设置 Label1
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.
最新文章
- wampserver解决“不能切换在线”及运行“404问题”
- Atitit jsr规范化分类 attilax总结
- Heartbeat的两个小BUG
- C++十进制转换为二进制
- Linux内核学习笔记
- Oracle 课程七之分析和动态采样
- js点击图片显示在左边大图
- SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-007-表单验证@Valid、Error
- 在LINUX终端和VIM下复制粘贴
- [PWA] 14. Loop cursor
- classic asp中使用ADODB.Command防止sql injection
- iOS8的屏幕旋转的问题
- Linux 上 C 程序的内存布局
- 分布式协调服务-Zookeeper
- 54. Spiral Matrix(中等)
- python 对 sqlite3的简单使用
- Java知多少(57)主线程
- centos中安装tomcat+jenkins
- python string 模块
- Unix网络编程_卷1卷2