我在运行时填充的表单上有两个Listbox。
我有一个OnClick事件,它改变了“Selected”列表框的颜色(加上一堆其他东西),以便我知道哪一个对用户有效。
如果用户单击listBox中的Item,则一切正常 - 但是 - 如果他们单击列表框中的空白区域,则不会触发OnClick。
我想过使用OnMouseUp并指向OnClick事件,但当时不想要该事件中的其他内容。
如何在ListBox的空白区域内检测到Click?
答案 0 :(得分:2)
您实际上正在寻找的是检测焦点的变化。您想要检测控件何时获得焦点,然后何时失去焦点。为此,您应该使用OnEnter
和OnExit
事件。 OnClick
事件只是该任务的错误事件。
使用OnEnter事件处理程序可以进行任何特殊处理 当控件变为活动状态时。
在表单之间切换时不会发生OnEnter事件 另一个应用程序和包含该应用程序的应用程序 控制。
在单独的容器控件中切换控件时,例如 TPanel和TGroupBox控件,OnEnter事件发生 容器控件的OnEnter事件之前的容器。
类似地,容器的OnExit事件发生在OnExit之后 当焦点移动到另一个时,容器中的控件事件 在集装箱外控制。
例如,考虑一个带有“确定”按钮和组框的表单 包含三个单选按钮,其中焦点当前在OK上 按钮。当用户单击其中一个单选按钮时,会出现OnExit事件 按钮出现,然后是组框上的OnEnter事件, 最后单击单选按钮上的OnEnter事件。如果 然后用户点击确定按钮,收音机的OnExit事件 按钮发生,然后是组框的OnExit事件,然后 按钮的OnEnter事件发生。
答案 1 :(得分:-1)
Hum ... Listbox.ItemIndex = -1表示您单击空白区域。使用mouseevent,它应该可以解决问题。
另一种选择:也许您可以尝试检查具有焦点的组件,而不是使用点击事件。
编辑:没有可用的Delphi5,我可以告诉你,这个'bug'在XE中得到修复。 设置一个计时器并检查哪个列表框具有焦点(Listbox.Focused),如果希望此属性可用。