列表框“点击”没有注册 - 如何修复?

时间:2013-06-30 16:50:26

标签: delphi listbox onclick delphi-5

我在运行时填充的表单上有两个Listbox。

我有一个OnClick事件,它改变了“Selected”列表框的颜色(加上一堆其他东西),以便我知道哪一个对用户有效。

如果用户单击listBox中的Item,则一切正常 - 但是 - 如果他们单击列表框中的空白区域,则不会触发OnClick。

我想过使用OnMouseUp并指向OnClick事件,但当时不想要该事件中的其他内容。

如何在ListBox的空白区域内检测到Click?

2 个答案:

答案 0 :(得分:2)

您实际上正在寻找的是检测焦点的变化。您想要检测控件何时获得焦点,然后何时失去焦点。为此,您应该使用OnEnterOnExit事件。 OnClick事件只是该任务的错误事件。

来自documentation for OnEnter

  

使用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),如果希望此属性可用。