delphi firemonkey使用 TListbox 自定义列表数据(二StyleBook方式实现)
上一篇用设计好界面后用代码添加稍微有些麻烦,所以改为用StyleBook设计好后添加Item
界面上添加ListBox后改Item高度为100
右键添加一条空白记录,观察高度,并且方便自定义编辑style样式
默认添加一条ListBoxItem1Style1的样式,添加Layout布局到这个样式下,并且添加需要的控件进去
layout布局改为如下显示,演示用的文本及图形显示,也可以添加任何控件进去,作为演示用添加的多了就稍显复杂
关闭设计界面时会提示是否应用
窗口上的按钮事件手动添加一条记录,TText提示找不到需要uses FMX.Objects
procedure TForm1.Button1Click(Sender: TObject); const BitmapFile: string = 'D:\People\1.png'; // 图片文件路径 var ListBoxItem: TListBoxItem; ItemText: TText; ItemImage: TImage; begin ListBoxItem := TListBoxItem.Create(nil); ListBoxItem.Parent := ListBox1; ListBoxItem.StyleLookup := 'ListBoxItem1Style1'; // 设置列表项的样式 ItemText := ListBoxItem.FindStyleResource('text1') as TText; // 获取列表项中的文本控件 if Assigned(ItemText) then ItemText.Text := '张三'; // 设置文本控件的文本内容为'张三' ItemText := ListBoxItem.FindStyleResource('text2') as TText; // 获取列表项中的文本控件 if Assigned(ItemText) then ItemText.Text := '48'; // 设置文本控件的文本内容为'48' ItemImage := ListBoxItem.FindStyleResource('Image1Style') as TImage; // 获取列表项中的图片控件 if Assigned(ItemImage) then if FileExists(BitmapFile) then ItemImage.Bitmap.LoadFromFile(BitmapFile); // 加载指定路径的图片文件到图片控件中 end;
执行后效果如下
点击后取值,仅做示例
procedure TForm1.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); var ItemText1: TText; ItemText2: TText; ItemImage: TImage; begin // 从被点击的列表框项中获取值 ItemText1 := Item.FindStyleResource('text1') as TText; ItemText2 := Item.FindStyleResource('text2') as TText; ItemImage := Item.FindStyleResource('Image1Style') as TImage; if Assigned(ItemText1) then ShowMessage('文本1: ' + ItemText1.Text); if Assigned(ItemText2) then ShowMessage('文本2: ' + ItemText2.Text); if Assigned(ItemImage) and Assigned(ItemImage.Bitmap) then ShowMessage('图像: 已加载') else ShowMessage('图像: 未加载'); end;
可以放任何自己需要的控件上去,如图
演示代码
procedure TForm1.Button2Click(Sender: TObject); var ListBoxItem: TListBoxItem; ItemText: TText; ItemProgress: TProgressBar; i: Integer; begin if ListBox1.Items.Count > 0 then begin for i := 0 to Pred(ListBox1.Items.Count) do begin ListBoxItem := ListBox1.ItemByIndex(i); ItemText := ListBoxItem.FindStyleResource('Caption') as TText; if Assigned(ItemText) then ItemText.Text := 'Hello World! ' + IntToStr(i); ItemText := ListBoxItem.FindStyleResource('SubItem1') as TText; if Assigned(ItemText) then ItemText.Text := 'SubItem1 ' + IntToStr(i); ItemText := ListBoxItem.FindStyleResource('SubItem2') as TText; if Assigned(ItemText) then ItemText.Text := 'SubItem2 ' + IntToStr(i); ItemProgress := ListBoxItem.FindStyleResource('Progress') as TProgressBar; if Assigned(ItemProgress) then ItemProgress.Value := Random(100); end; end; end;
本文来自博客园,作者:liessay,转载请注明原文链接:https://www.cnblogs.com/liessay/p/17964445