OrangeUI

ListBox的主要事件就是列表项点击事件OnClickItem(AItem:TSkinItem),
这个事件的参数AItem就是所点击的列表项,
TSkinItem是TSkinListBoxItem、TSkinListViewItem、TskinTreeViewItem的基类,
需要引用uSkinItems单元,
如下图的ListBox,我点击其中的列表项,弹出对话框显示列表项的标题Item.Caption,

在属性查看器串切换到事件页,双击OnClickItem右边的空白,

代码如下:

需要引用uSkinItems单元,
procedure TFrameListBox_UseItemDesignerPanel.lbSimpleClickItem(
AItem: TSkinItem);
begin
ShowMessage(AItem.Caption);
end;
 
运行时点击列表项看一下效果,
如下图,我点击了Documents这个列表项弹出对话框提示Documents:

 
接下来讲解一下ListBox使用设计面板ItemDesignerPanel时点击列表项的事件机制,
设计面板ItemDesignerPanel上面可以放很多子控件,用于设计列表项的显示样式,
通常情况下子控件的HitTest属性需要设置为False,表示此子控件仅用于显示,
不需要触发鼠标点击事件OnClick,
某些情况下ItemDesignerPanel上面需要放一些按钮(或复选框CheckBox等),
用于实现与点击列表项不同的功能,
那就要把按钮的HitTest设置为True,表示点击此按钮时响应按钮的OnClick事件,
而不再响应ListBox.OnClickItem事件,
当点击在按钮之外的地方时,才响应ListBox.OnClickItem事件,
 
举例说明一下:
我们在ItemDesignerPanel上面放一个按钮btnShowDetail,
点击此按钮时弹出对话框显示列表项的Detail,
如下图所示:

把btnShowDetail的HitTest属性设置为True,
表示点击它时响应它的OnClick事件,

而其他的Image和Label控件的HitTest设置为False,
再写btnShowDetail的OnClick事件,代码如下:

procedure TFrameListBox_UseItemDesignerPanel.btnShowDetailClick(Sender: TObject);
begin
ShowMessage(Self.lbSimple.Prop.InteractiveItem.Detail);
end;
 
在里面调用了ListBox.Prop.InteractiveItem这个属性,
表示当前点击按钮所在的列表项,
注意:
InteractiveItem仅在点击子控件触发的OnClick事件中有效,
 
运行点击btnShowDetail看一下效果: