LiveBindings绑定到漂亮的TCombobox

news/2025/11/8 20:01:33/文章来源:https://www.cnblogs.com/sf4534/p/19202970

这一课,将演示如何绑定到TCombobox,这个控件通常用来给用户提供选项列表。它们具有比VCL控件较强的定制性,可以使用样式窗口对每一个项进行外观的定制。

如果读者已经看过《一步一步学习使用LiveBindings(9)》,那应该会比较熟悉这一课的案例,因为笔者将上一节的案例LiveBindings_BindFormat的源代码复制到了这一节作为起点。

在上一节的员工管理窗口中,有一个Title职位字段,在真实的项目这个字段应该是一个下列拉表框供用户选择,而不是一个文本输入框,以避免用户胡乱输入太多的职位而无法管理,效果如下所示:

img
我们通常会有一个表来存放职位信息,接下来一步一步演示如何实现从数据源到Combobox下拉表列框的绑定。

1. 打开LiveBindings_BindFormat项目的主窗体,从工具栏中拖一个TProtoTypeBindSource控件到主窗体上,将其命名为TitleBindSource,然后右击该控件,打开Fields Editor,定义如下的几个字段和生成器。

img

几个字段的作用如下:

  • ContactTitle:职位名称
  • TitleImageIndex:职位的图片索引,演示如何给Combobox绑定一张图片。
  • TitleDescription:职位描述
  • TitleColor:将用于职位的颜色。

2. 在主窗体上右击鼠标,从弹出的菜单中选择“LiveBinding Wizard...”,使用向导,选择“Link a Control with a field”菜单项,创一个新的TCombobox到数据源TitleBindSource的连接,指定FieldName为ContactTitle,向导会自动将Combobox控件的Synch与TitleBindSource的*进行连接,并有一个指向Item.Text的单向连接。

img

绑定的连接是一个类型为TLinkListControlToField连接类型,FireMonkey的ListBox、ListView都会使用这种类型来绑定数据。

设计器中的Combobox除了Synch之外,还有如下的几个可绑定类型:

  • SelectedValue:当选中项时,SelectedValue返回的给其他数据源的数据。
  • Item.Text:显示在Combobox中的项的文本。
  • Item.ImageIndex:显示在Combobox的图片索引。
  • Item.LookupData:SelectedValue将返回的值类型,也就是要搜寻的数据。

在这里需要将SelectedValue连接到EmployeeBindSource控件的Title字段,以便将当前选中的Contact Title更新到EmployeeBindSource的底层表。

在设计器中拖动SelectedValue到EmployeeBindSource控件的Title字段,设计器会弹出一个提示:

img

向导会删除Synch到*的连接,接下来将如下图连接Item.ImageIndex,并指定Item.LookupData到ContactTitle,以确保SelectedValue会返回职位名称。

img

3. 选中Combobox控件,指定其Images属性为一个TImageList,这样就会在列表项左侧显示图片。

最终效果如下所示:

img

4. 在代码部分,更新了EmployeeObjectU.pas,添加了一个新的类TEmployeeTitle,现附上更新后的代码

EmployeeObjectU.pas

unit EmployeeObjectU;interfaceusesSystem.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, System.StrUtils;typeTEmployee = classprivateFContactBitmap: TBitmap;      //联系人图片FContactName: string;         //联系人名称FTitle: string;               //职位FHireDate: TDate;             //雇佣日期FSalary: Integer;             //薪水FAvailNow: Boolean;           //是否在职publicconstructor Create(const NewName: string;const NewTitle: string;const NewHireDate: TDate;const NewSalary: Integer;const NewAvail: Boolean);property ContactBitmap: TBitmap read FContactBitmap write FContactBitmap;property ContactName: string read FContactName write FContactName;property Title: string read FTitle write FTitle;property HireDate: TDate read FHireDate write FHireDate;property Salary: Integer read FSalary write FSalary;property AvailNow: Boolean read FAvailNow write FAvailNow;end;typeTEmployeeTitle = classprivateFContactTitle: string;                 //职位名称FTitleColor: Cardinal;                 //显示颜以TTitleImageIndex: Integer;             //显示图标索引TTitleDescription: string;             //职位描述publicconstructor Create(const NewTitle: string;const NewTitleDesc: string;const NewTitleColor: Cardinal;const NewImageIdx: Integer);property ContactTitle: string read FContactTitle write FContactTitle;property TitleColor: Cardinal read FTitleColor write FTitleColor;property TitleImageIndex: Integer read TTitleImageIndex write TTitleImageIndex;property TitleDescription: string read TTitleDescription write TTitleDescription;end;implementation{ TEmployee }constructor TEmployee.Create(const NewName, NewTitle: string;const NewHireDate: TDate; const NewSalary: Integer; const NewAvail: Boolean);
varNewBitmap: TBitmap;ResStream: TResourceStream;
begin//将根据联系人名称姓来关联资源文件ResStream := TResourceStream.Create(HINSTANCE, 'Bitmap_' + LeftStr(NewName, Pos(' ', NewName) - 1), RT_RCDATA);tryNewBitmap := TBitmap.Create;NewBitmap.LoadFromStream(ResStream);finallyResStream.Free;end;FContactName   := NewName;FTitle         := NewTitle;FContactBitmap := NewBitmap;       //来自资源的图片FHireDate      := NewHireDate;FSalary        := NewSalary;FAvailNow      := NewAvail;
end;{ TEmployeeTitle }constructor TEmployeeTitle.Create(const NewTitle, NewTitleDesc: string;const NewTitleColor:Cardinal;const NewImageIdx: Integer);
beginFContactTitle   := NewTitle;FTitleColor     := NewTitleColor;TTitleImageIndex := NewImageIdx;       //来自TImageList的图片TTitleDescription:= NewTitleDesc;
end;end.

在主窗体中,为TitleBindSource的OnCreateAdapter事件添加了如下的代码来:

procedure TfrmMain.TitleBindSourceCreateAdapter(Sender: TObject;var ABindSourceAdapter: TBindSourceAdapter);
beginbsEmployeeTitle:= TListBindSourceAdapter<TEmployeeTitle>.Create(self, nil, True);//赋值给TBindSourceAdapterABindSourceAdapter := bsEmployeeTitle;
end;

在FormCreate中关联了List.

procedure TfrmMain.FormCreate(Sender: TObject);
beginLoadData;  //加载数据//设置员工列表bsEmployee.SetList(FEmployeeList, False);bsEmployee.Active := True;//设置员工编号列表bsEmployeeTitle.SetList(FEmployeeTitleList, False);bsEmployeeTitle.Active := True;
end;

最后,选中Combobox控件,设置DropDownKind为Custom,然后添加LinkFillControlToField.OnFillingListItem事件,让其在填充列表项时,指定一个列表项的样式:

procedure TfrmMain.LinkFillControlToFieldFillingListItem(Sender: TObject;const AEditor: IBindListEditorItem);
begin//指定列表项的样式(AEditor.CurrentObject as TListBoxItem).StyleLookup :='listboxitembottomdetail';
end;

listboxitembottomdetail是内置的列表项的样式,它需要指定Item.text和Item.Detail的值。

TLinkFillControlToField的ListItemStyle为ItemDataEditor,这样在LiveBindings Designer设计视图中就会显示Item.Detail和Item.Bitmap以及Item.Accessory,将Item.Detail绑定到TitleDescription即可。

img

显示效果如下所示:

img

选择使用FireMonkey的程序员,一定会被其强大的自定义样式定义所吸引,在接下来的课程中,将会讨论如何自定义样式。

 

 

 

 

 

 


博客园
gfsfsfasdas---1108--1853-微博佬的号2018-2个-发20条
weibo.com/ttarticle/p/show?id=2309405230793865167387
weibo.com/ttarticle/p/show?id=2309405230794045522031
weibo.com/ttarticle/p/show?id=2309405230794158768654
weibo.com/ttarticle/p/show?id=2309405230794217488420
weibo.com/ttarticle/p/show?id=2309405230794317889664
weibo.com/ttarticle/p/show?id=2309405230794477535563
weibo.com/ttarticle/p/show?id=2309405230794481729701
weibo.com/ttarticle/p/show?id=2309405230794636918864
weibo.com/ttarticle/p/show?id=2309405230794695377203
weibo.com/ttarticle/p/show?id=2309405230794804429219
weibo.com/ttarticle/p/show?id=2309405230794888577110
weibo.com/ttarticle/p/show?id=2309405230794959880424
weibo.com/ttarticle/p/show?id=2309405230795114807454
weibo.com/ttarticle/p/show?id=2309405230795245093476
weibo.com/ttarticle/p/show?id=2309405230795266064793
weibo.com/ttarticle/p/show?id=2309405230795396088383
weibo.com/ttarticle/p/show?id=2309405230795425448034
weibo.com/ttarticle/p/show?id=2309405230795551277732
weibo.com/ttarticle/p/show?id=2309405230795584569542
weibo.com/ttarticle/p/show?id=2309405230795706466331
weibo.com/ttarticle/p/show?id=2309405230795748147741
weibo.com/ttarticle/p/show?id=2309405230795857461250
weibo.com/ttarticle/p/show?id=2309405230796008194248
weibo.com/ttarticle/p/show?id=2309405230796029428395
weibo.com/ttarticle/p/show?id=2309405230796159189375
weibo.com/ttarticle/p/show?id=2309405230796184354819
weibo.com/ttarticle/p/show?id=2309405230796318834774
weibo.com/ttarticle/p/show?id=2309405230796344000613
weibo.com/ttarticle/p/show?id=2309405230796469829694
weibo.com/ttarticle/p/show?id=2309405230796499190220
weibo.com/ttarticle/p/show?id=2309405230796620824910
weibo.com/ttarticle/p/show?id=2309405230796658573582
weibo.com/ttarticle/p/show?id=2309405230796767625521
weibo.com/ttarticle/p/show?id=2309405230796821889351
weibo.com/ttarticle/p/show?id=2309405230796922552570
weibo.com/ttarticle/p/show?id=2309405230796977340740
weibo.com/ttarticle/p/show?id=2309405230797136462253
weibo.com/ttarticle/p/show?id=2309405230488746066206
weibo.com/ttarticle/p/show?id=2309405230488750522387
weibo.com/ttarticle/p/show?id=2309405230488813174887
weibo.com/ttarticle/p/show?id=2309405230488817369139
weibo.com/ttarticle/p/show?id=2309405230488884740229
weibo.com/ttarticle/p/show?id=2309405230488884478177
weibo.com/ttarticle/p/show?id=2309405230488905449594
weibo.com/ttarticle/p/show?id=2309405230488977014894
weibo.com/ttarticle/p/show?id=2309405230489035473000
weibo.com/ttarticle/p/show?id=2309405230489039667648
weibo.com/ttarticle/p/show?id=2309405230489060638854
weibo.com/ttarticle/p/show?id=2309405230489069027538
weibo.com/ttarticle/p/show?id=2309405230489115164932
weibo.com/ttarticle/p/show?id=2309405230489128009770
weibo.com/ttarticle/p/show?id=2309405230489144525022
weibo.com/ttarticle/p/show?id=2309405230489186730329
weibo.com/ttarticle/p/show?id=2309405230489232605343
weibo.com/ttarticle/p/show?id=2309405230489287131258
weibo.com/ttarticle/p/show?id=2309405230489320947944
weibo.com/ttarticle/p/show?id=2309405230489337463258
weibo.com/ttarticle/p/show?id=2309405230489392250883
weibo.com/ttarticle/p/show?id=2309405230489434194106
weibo.com/ttarticle/p/show?id=2309405230489446515155
weibo.com/ttarticle/p/show?id=2309405230489492652063
weibo.com/ttarticle/p/show?id=2309405230489551372340
weibo.com/ttarticle/p/show?id=2309405230489589121231
weibo.com/ttarticle/p/show?id=2309405230489589121237
weibo.com/ttarticle/p/show?id=2309405230489606160423
weibo.com/ttarticle/p/show?id=2309405230489660686802
weibo.com/ttarticle/p/show?id=2309405230489706823834
weibo.com/ttarticle/p/show?id=2309405230489761349644
weibo.com/ttarticle/p/show?id=2309405230489761087559
weibo.com/ttarticle/p/show?id=2309405230489870139767
weibo.com/ttarticle/p/show?id=2309405230489874595846
weibo.com/ttarticle/p/show?id=2309405230489878790147
weibo.com/ttarticle/p/show?id=2309405230489920733186
weibo.com/ttarticle/p/show?id=2309405230489949831239
weibo.com/ttarticle/p/show?id=2309405230490050494714
weibo.com/ttarticle/p/show?id=2309405230490059145279
weibo.com/ttarticle/p/show?id=2309405230490075660422
weibo.com/ttarticle/p/show?id=2309405230490214334545
weibo.com/ttarticle/p/show?id=2309405230490327318586
weibo.com/ttarticle/p/show?id=2309405230491652980887
weibo.com/ttarticle/p/show?id=2309405230491669758088
weibo.com/ttarticle/p/show?id=2309405230491678146644
weibo.com/ttarticle/p/show?id=2309405230491682078944
weibo.com/ttarticle/p/show?id=2309405230491694923835
weibo.com/ttarticle/p/show?id=2309405230491694923900
weibo.com/ttarticle/p/show?id=2309405230491711439023
weibo.com/ttarticle/p/show?id=2309405230491711701107
weibo.com/ttarticle/p/show?id=2309405230491812364387
weibo.com/ttarticle/p/show?id=2309405230491824947296
weibo.com/ttarticle/p/show?id=2309405230491833336053
weibo.com/ttarticle/p/show?id=2309405230491845918767
weibo.com/ttarticle/p/show?id=2309405230491845918763
weibo.com/ttarticle/p/show?id=2309405230491862696122
weibo.com/ttarticle/p/show?id=2309405230491916959930
weibo.com/ttarticle/p/show?id=2309405230491950514337
weibo.com/ttarticle/p/show?id=2309405230491967291700
weibo.com/ttarticle/p/show?id=2309405230491975680025
weibo.com/ttarticle/p/show?id=2309405230491992719499
weibo.com/ttarticle/p/show?id=2309405230491996651644
weibo.com/ttarticle/p/show?id=2309405230492005040391
weibo.com/ttarticle/p/show?id=2309405230492034400307
weibo.com/ttarticle/p/show?id=2309405230492076343473
weibo.com/ttarticle/p/show?id=2309405230492110159882
weibo.com/ttarticle/p/show?id=2309405230492126937143
weibo.com/ttarticle/p/show?id=2309405230492130869304
weibo.com/ttarticle/p/show?id=2309405230492143452301
weibo.com/ttarticle/p/show?id=2309405230492147908777
weibo.com/ttarticle/p/show?id=2309405230492164685839
weibo.com/ttarticle/p/show?id=2309405230492189851927
weibo.com/ttarticle/p/show?id=2309405230492227600566
weibo.com/ttarticle/p/show?id=2309405230492265087310
weibo.com/ttarticle/p/show?id=2309405230492282126464
weibo.com/ttarticle/p/show?id=2309405230492286320656
weibo.com/ttarticle/p/show?id=2309405230492290252863
weibo.com/ttarticle/p/show?id=2309405230492298903740
weibo.com/ttarticle/p/show?id=2309405230492311224529
提家庭生活--1108--1036
weibo.com/ttarticle/p/show?id=2309405230492324069441
weibo.com/ttarticle/p/show?id=2309405230492378595710
weibo.com/ttarticle/p/show?id=2309405230492424732850
weibo.com/ttarticle/p/show?id=2309405230492437053480
weibo.com/ttarticle/p/show?id=2309405230492437053574
weibo.com/ttarticle/p/show?id=2309405230492437315790
weibo.com/ttarticle/p/show?id=2309405230492470870188
weibo.com/ttarticle/p/show?id=2309405230492483453037
weibo.com/ttarticle/p/show?id=2309405230492521201677
weibo.com/ttarticle/p/show?id=2309405230492537716749
weibo.com/ttarticle/p/show?id=2309405230492584116302
weibo.com/ttarticle/p/show?id=2309405230492583854166
weibo.com/ttarticle/p/show?id=2309405230492588310707
weibo.com/ttarticle/p/show?id=2309405230492596437076
weibo.com/ttarticle/p/show?id=2309405230492604826023
weibo.com/ttarticle/p/show?id=2309405230492630253704
weibo.com/ttarticle/p/show?id=2309405230492642574562
weibo.com/ttarticle/p/show?id=2309405230492688973908
weibo.com/ttarticle/p/show?id=2309405230492726460746
weibo.com/ttarticle/p/show?id=2309405230492743237686
weibo.com/ttarticle/p/show?id=2309405230492751888397
weibo.com/ttarticle/p/show?id=2309405230492760277108
weibo.com/ttarticle/p/show?id=2309405230492776792141
weibo.com/ttarticle/p/show?id=2309405230492802220235
weibo.com/ttarticle/p/show?id=2309405230492801958176
weibo.com/ttarticle/p/show?id=2309405230492831580458
weibo.com/ttarticle/p/show?id=2309405230492852289585
weibo.com/ttarticle/p/show?id=2309405230492881911946
weibo.com/ttarticle/p/show?id=2309405230492902883424
weibo.com/ttarticle/p/show?id=2309405230492915466466
weibo.com/ttarticle/p/show?id=2309405230492927787230
weibo.com/ttarticle/p/show?id=2309405230492978380848
weibo.com/ttarticle/p/show?id=2309405230492982575196
weibo.com/ttarticle/p/show?id=2309405230492982313283
weibo.com/ttarticle/p/show?id=2309405230493032906966
weibo.com/ttarticle/p/show?id=2309405230493049684188
weibo.com/ttarticle/p/show?id=2309405230493087170596
weibo.com/ttarticle/p/show?id=2309405230493087170778
weibo.com/ttarticle/p/show?id=2309405230493108404382
weibo.com/ttarticle/p/show?id=2309405230493133570259
weibo.com/ttarticle/p/show?id=2309405230493141958709
weibo.com/ttarticle/p/show?id=2309405230493141958787
weibo.com/ttarticle/p/show?id=2309405230493221388368
weibo.com/ttarticle/p/show?id=2309405230493246816570
weibo.com/ttarticle/p/show?id=2309405230493263593563
weibo.com/ttarticle/p/show?id=2309405230493288497587
weibo.com/ttarticle/p/show?id=2309405230493292691487
weibo.com/ttarticle/p/show?id=2309405230493305536624

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工具 画面

--本篇导航--素材预览面板 合成面板 工具栏 AutoSway插件 AE中可以按Tab键上面的~键(英文输入法下)或双击面板板头,可以将鼠标指针所在区域的面板最大化显示。 素材预览面板 双击素材可以查看素材画面,对于视频素材…

SGLANG Docker容器化部署指南

SGLANG是一个高性能的语言模型推理引擎,旨在为大语言模型(LLM)应用提供高效、灵活的部署和服务能力。该引擎基于sgl-project开源项目开发,支持复杂的提示工程、多轮对话管理和推理优化,广泛应用于智能客服、内容生…

保研经验分享

写在前面 保研结束有一段时间了,正好有幸给本学院同学分享一下经验(当然算不上经验,就是一些经历和心得了),就写点东西,希望能给读者一点启发。今年保研形势还是比较严峻的,虽然名额多了,但是夏令营效力减弱了…

Vibe Coding - 零成本使用claude code 、gpt-5、grok-code-fast-1氛围编程

概述 人工智能驱动的开发已经成为现代编程领域的潮流,越来越多的开发者开始探索如何将 AI 能力集成到自己的项目中。然而,工具的碎片化、接入门槛高、费用昂贵等问题常常让人望而却步。AgentRouter 的出现,为开发者…

MyBatis-Plus分页查询中distinct与order by组合的SQLServer兼容性问题解析 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【React】useMemo 和 useEffect 的用法 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[LangChain] 15. 内存型向量库

回忆 RAG 关键步骤:文本切割 嵌入处理 存储向量数据库向量数据库可以分为这几种类型:内存型 本地自托管 云托管LangChain 内置了 MemoryVectorStore,这就是一个内存型向量库,用于将文档向量存储到内存中,适合本地…

完整教程:从架构师视角看 RPC:分布式系统的灵魂纽带

完整教程:从架构师视角看 RPC:分布式系统的灵魂纽带pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

题解:qoj8047 DFS Order 4

题意:给出 \(n,P\),现在问对于所有 \(n\) 个点且父亲编号小于儿子的树,对其进行 dfs 并且优先遍历编号小的子节点,问有多少种 dfs 序。对 \(P\) 取模。\(n\le 800\)。 做法: 首先考虑如何判定一种 dfs 序是否合法…

题解:qoj8047 DFS Order 4

题意:给出 \(n,P\),现在问对于所有 \(n\) 个点且父亲编号小于儿子的树,对其进行 dfs 并且优先遍历编号小的子节点,问有多少种 dfs 序。对 \(P\) 取模。\(n\le 800\)。 做法: 首先考虑如何判定一种 dfs 序是否合法…

Oracle数据库恢复检查脚本

Oracle数据库恢复检查脚本prompt +----------------------------------------------------------------------------+ prompt | Oracle Database Recovery Check Result | promp…

视野修炼-技术周刊第126期 | TypeScript #1

① 🤫spoilerjs ② 🏆 TypeScript 跃升至 \#1 - GitHub 上最常用的语言 ③ 中国法定假日查询库 ④ type-flag - 类型化命令行参数解析 ⑤ Node v24 已经是最新的LTS 版本 ⑥ TypingSVG ⑦ 腾讯 TDesign 组件库的 u…

详细介绍:FPGA 中的 AXI 总线介绍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:眼控交互:ErgoLAB新一代人机交互方式

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

大模型、智能体和MCP服务间的交互

大模型、智能体和MCP服务间的交互本文以从图书馆借书为例大模型LLM提供智能决策,基于权限结果智能体Agent协调流程,不包含业务逻辑图书馆MCP服务处理业务权限验证(能做什么)认证服务处理基础身份验证(谁),非MCP…

2025年国内成人自考机构口碑推荐排行榜单:权威解析与选择指南

摘要 2025年国内成人自考教育行业迎来新一轮发展机遇,随着终身学习理念的普及和职业晋升需求的增长,成人自考市场规模持续扩大。本文基于权威数据分析和用户口碑评价,为您呈现最新成人自考机构排行榜单,并提供详细…

大信息领域列式存储与云存储的融合发展

大信息领域列式存储与云存储的融合发展pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

2025年六安市成人自考机构口碑推荐排行榜

摘要 2025年,成人自考教育行业迎来快速发展,在职人士对学历提升需求激增。本文基于权威数据和用户口碑,综合评估国内成人自考机构,推出前十排名榜单,并提供详细比较表单,助您高效选择可靠机构。榜单重点突出服务…

分享一个Oracle 数据库信息收集脚本

分享一个Oracle 数据库信息收集脚本LINUX: #!/bin/sh ############################################################################## # 脚本名称:oracle_db_info_collector.sh # 脚本版本:V3.0 # 功能描述:Or…

2025年11月杭州集训记

前面的区域,以后再来探索吧。