2016-07-31 60 views
0

我有一个TDBgrid,它带有一个切换布尔值的OnCellClick事件。在OnDblClick之前忽略OnClick

我想能够用OnDblClick启动另一个窗体,但不希望OnCellClick更改布尔值。

通过编程方式调用OnCellClick来恢复作为OnDblClick处理的一部分的布尔值的缺点,有没有什么办法可以在双击时忽略OnCellClick?

我不想弹出菜单或右键单击,因为这主要是在触摸屏设备上。

+1

GetDoubleClickTime,然后在DoubleClick + 100毫秒左右的时间间隔内触发OnClick中的计时器。如果OnDoubleClick处于活动状态,则禁用该定时器。计时器到期时运行CellClick。 –

+1

您建议的用户界面将使用非常混乱。找到一种不同的方式。 –

+0

除了使用'OnCellClick'之外,您应该考虑使用诸如'TADOQuery.AfterScroll'之类的东西并更新一些变量以了解它所在的记录。使用它来执行您的单击操作,而不是实际检测到单击。不要为“单击”做任何事情。只需处理双击。数据集的滚动是您的“单击”任务的适当触发器。用户可以选择记录的方式多于单击。例如,键盘上的向上/向下箭头。或者只需在数据网格上滚动鼠标滚轮即可。 –

回答

0

或者把你的窗体打开CTRL点击。

1

下面是TurboPower公司在VisualPlanIt组件所做的:

删除onclick处理程序。添加一个计时器。它的间隔长度应该比双击的持续时间稍长,即几十分之一秒。在MouseDown事件中启动计时器。在计时器的OnTimer处理程序中禁用计时器并执行常规OnClick事件中应发生的操作。如果在计时器处于活动状态时发生第二次点击,则必须进行双击。

该序列将单个和双击分开。然而,对我而言,这有点令人不安,因为正常的鼠标点击仅在很短的延迟后才会看到反应。