FireMonkey ListView 设计期添加按钮及其 OnClick 事件

51 篇文章 6 订阅
18 篇文章 2 订阅

FireMonkey 的 ListView 在设计期可以定制一个 Item 上有多个 TEXT,IMAGE 和 Button。

如何做,本博客前面有文章讲到。请见这里:FireMonkey ListView 绑定数据显示多个图片_pcplayer的博客-CSDN博客

那么,如果添加的是一个按钮,如何知道用户点了这个按钮?在设计期添加的按钮,其属性面板上,只有 Property 而没有 Event,没有 OnClick 可以选择。

看了半天 ListView 的源代码没找到办法。上网一搜,有了办法:

listview - Working with buttons in a TListView - Stack Overflow

我自己的测试代码

在设计期,给一个 Item 添加两个按钮。其默认的名字分别是:TextButton2 和 TextButton3。

在 ListView1 的属性面板上,切换到 Events 事件页,找到 OnButtonClick,双击,IDE 生成代码框架。代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
  AItem: TListViewItem;
begin
  AItem := ListView1.Items.Add;
end;


procedure TForm1.ListView1ButtonClick(const Sender: TObject;
  const AItem: TListItem; const AObject: TListItemSimpleControl);
begin
  //以下代码,测试成功。
  ShowMessage(AObject.Name + ' _ ' + AItem.Index.ToString + ' - ' + (AObject as TListItemTextButton).Text);
end;

上面代码的第一个 Button1Click 是为了测试增加的一个按钮,按一次在 ListView1 里面增加一个 Item。

第二个方法,就是我们要的。实际测试结果,完全符合预期。

实际测试结果,点了哪一条 Item 上面的按钮,显示出来的 AItem.Index 是正确的。也能够正确显示出该按钮的名字(TextButton2 或者 TextButton3),也能够正确显示按钮上的 Text.

上面的代码,对 AObject 进行了类型转换,转换为 TListItemTextButton,否则无法获取到它的 Text 属性。类型转换能够成功,说明这个设计期动态增加的按钮的类型,就是 TListItemTextButton,而不是设计期的属性面板上显示的 TTextButtonObjectAppeaerance.

结论:

如果想知道用户点了哪个按钮,并相应给出动作,这里不是给该按钮找一个 OnClick 而是直接使用 ListView 的 OnButtonClick 事件。在事件里面判断用户点了哪个按钮。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ModernListView (Berlin, Tokyo [with fix], Rio) 很好的Delphi Firemonkey控件,可用作Android、iOS、MacOS、Windows开发,比Delphi自带的listview更好用、功能更强大! ListView1.SetColorItemSelected(TAlphaColorRec.Orangered); ListView1.SetColorItemFill(TAlphaColorRec.Whitesmoke); ListView1.SetColorItemFillAlt(TAlphaColorRec.Lightgrey); ListView1.SetColorBackground(TAlphaColorRec.Whitesmoke); ListView1.SetColorItemSeparator(TAlphaColorRec.Red); ListView1.SetColorText(TAlphaColorRec.Darkmagenta); ListView1.SetColorTextSelected(TAlphaColorRec.Blueviolet); ListView1.SetColorTextDetail(TAlphaColorRec.Darksalmon); ListView1.SetColorHeader(TAlphaColorRec.Crimson); ListView1.SetColorTextHeader(TAlphaColorRec.Whitesmoke); ListView1.SetColorTextHeaderShadow(TAlphaColorRec.grey); ListView1.SetColorPullRefresh(TAlphaColorRec.Lime); ListView1.SetColorPullRefreshIndicator(TAlphaColorRec.Limegreen); ListView1.SetColorStretchGlow(TAlphaColorRec.Limegreen); Style for ListView Columns Mode ListView1.ShowScrollBar - hide/show scrollbar ListView1.ItemsClearTrue - correct delete items ListView1.OffsetTop - indent of the first element ListView1.OffsetBottom - indent of the last element ListView1.getFirstVisibleItemIndex - first visible ItemIndex ListView1.getVisibleCount - amount of visible items ListView1.getLastVisibleItemindex - first visible ItemIndex + amount of visible items ListView1.SeparatorLeftOffset - indent for separator line ListView1.SeparatorRightOffset - indent for separator line ListView1.EnableTouchAnimation - enable/disable touch animation

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值