0

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

我有一个 OnClick 事件,它改变了“选定”列表框的颜色(加上一堆其他的东西),这样我就知道哪个对用户来说是活动的。

如果用户单击列表框中的项目,这一切都可以正常工作 - 但是 - 如果他们单击列表框中的空白,则不会触发 OnClick。

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

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

4

2 回答 2

2

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

文档中OnEnter

使用 OnEnter 事件处理程序可以在控件变为活动状态时进行任何特殊处理。

在窗体之间或另一个应用程序和包含该控件的应用程序之间切换时不会发生 OnEnter 事件。

在单独的容器控件(例如 TPanel 和 TGroupBox 控件)中的控件之间切换时,容器会在所包含控件的 OnEnter 事件之前发生 OnEnter 事件。

同样,当焦点移动到容器外的另一个控件时,容器的 OnExit 事件发生在容器中控件的 OnExit 事件之后。

例如,考虑一个带有 OK 按钮的表单和一个包含三个单选按钮的组框,其中焦点当前位于 OK 按钮上。当用户单击其中一个单选按钮时,会发生按钮的 OnExit 事件,然后是组框上的 OnEnter 事件,最后是单击的单选按钮上的 OnEnter 事件。如果用户然后单击“确定”按钮,则会发生单选按钮的 OnExit 事件,然后是组框的 OnExit 事件,然后发生按钮的 OnEnter 事件。

于 2013-06-30T18:57:49.560 回答
-1

哼... Listbox.ItemIndex = -1 表示你在空白区域点击。使用鼠标事件,它应该可以解决问题。

另一种选择:也许您可以尝试检查具有焦点的组件,而不是使用单击事件。

编辑:没有可用的 Delphi5,我可以告诉你这个“错误”在 XE 中已修复。设置一个 Timer 并检查哪个列表框具有焦点 (Listbox.Focused),如果希望此属性可用。

于 2013-06-30T16:53:27.083 回答