Delphi 列表框“;点击";未注册-如何修复?

Delphi 列表框“;点击";未注册-如何修复?,delphi,listbox,onclick,delphi-5,Delphi,Listbox,Onclick,Delphi 5,我在一个窗体上有两个在运行时填充的列表框 我有一个OnClick事件,它会更改“Selected”列表框的颜色(加上一系列其他内容),以便我知道哪个列表框对用户是活动的 如果用户单击列表框中的某个项目,这一切都可以正常工作。但是,如果用户在列表框的空白处单击,则不会触发OnClick 我曾想过使用OnMouseUp并指向OnClick事件,但当时不需要该事件中的其他内容 如何在列表框的空白处检测单击?哼。。。Listbox.ItemIndex=-1表示在空白区域中单击。有了mouseevent,

我在一个窗体上有两个在运行时填充的列表框

我有一个OnClick事件,它会更改“Selected”列表框的颜色(加上一系列其他内容),以便我知道哪个列表框对用户是活动的

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

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


如何在列表框的空白处检测单击?

哼。。。Listbox.ItemIndex=-1表示在空白区域中单击。有了mouseevent,它应该可以做到这一点

另一个选项:您可以尝试检查具有焦点的组件,而不是使用click事件

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

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

从:

使用OnEnter事件处理程序进行任何特殊处理 当控件处于活动状态时

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

在单独容器控件中的控件之间切换时,例如 TPanel和TGroupBox控制,将为 包含控件的OnNet事件之前的容器

类似地,容器的OnExit事件发生在OnExit之后 焦点移动到另一个容器时容器中控件的事件 容器外部的控件

例如,考虑一个带有OK按钮和组框的窗体 包含三个单选按钮,其中焦点当前位于“确定” 按钮当用户单击其中一个单选按钮时,将显示OnExit事件 出现按钮的,然后在组框上出现一个OnEnter事件, 最后单击单选按钮上的OneNet事件。如果 然后用户单击OK按钮,这是收音机的OnExit事件 按钮发生,随后是组框的OnExit事件,然后 按钮的OneNet事件发生


@格雷格:#1“ItemIndex:=-1”什么也没做#2没有“HasFocus”,3,David是正确的,“Focused”在OnMouseUp中工作,它将焦点移动到适当的框中。谢谢你们两位。
OnMouseUp
也不好。当然这不是你需要的。是什么让你认为用户是用鼠标导航的。他们可以使用键盘或其他输入设备。也许你实际上正在寻找的是
OnEnter
。但是,由于其他各种原因,这款应用程序必须使用鼠标,因此用户可以使用鼠标,也可以不使用鼠标,结果可能是有或无我同意计时器不是一种“干净”的方式。也许,您可以检查Application.OnMessage事件并过滤与焦点相关的事件?