VB6 ListBox 点击和双击

3

我需要在VB6的ListBox控件中,当用户单击或双击项目时运行不同的代码。当我单击控件时,Click事件处理程序会执行。但是,我发现当我双击控件时,Click和DblClick事件处理程序都会执行。

有没有一个好的解决方案,只运行DblClick事件处理程序代码而不先执行Click代码?

感谢任何建议。

2个回答

4
一个小技巧,您可以使用定时器控件和布尔变量:
  • 在单击事件上启动计时器,并将布尔变量设置为false
  • 在双击事件上将布尔变量设置为true
  • 当计时器Tick事件触发时,检查布尔变量以查看用户是单击还是双击
我建议将计时器间隔设置为Windows双击时间设置加上一点(应该有一个Windows API调用可提供此值),请注意保留HTML标记。

抢先一步了!我过去也用过同样的技巧。 - DJ.

2
Visual Basic 6中列表控件的行为如下:
  1. 单击某个项目时,会触发单击事件。

  2. 如果再次单击同一项目,则仍会触发单击事件。

  3. 双击项目时,会同时触发单击事件和双击事件。

注意点2。您需要在正在使用的表单中设置当前项目。每次检查单击事件时,首先要看当前项目是否与所单击的项目相同。如果不是相同项目,则正常处理单击事件。

如果双击新项目,则用户同时执行两件事情:选择新项目和执行双击项目。在这种情况下,首先触发单击,然后再触发双击。

这个序列与控件做您想要的事情没有什么不同。这与您点击新项目,等待X秒,然后双击同一项目的过程是相同的。

如果您的单击事件涉及将任务交给ActiveX EXE,并立即终止或设置数据以由后台计时器稍后处理,则需要有一个信号量或标志来指示单击事件生成的进程何时完成。只有在清除信号量后,才会处理双击事件。

如果您有其他详细信息,我的答案可以更具体。以下是一些可运行以查看列表框操作的代码。创建一个表单并将三个项目添加到列表中,然后添加以下代码。

Private Sub List1_Click()
    Print "Clicked - " & Me.List1.List(Me.List1.ListIndex)
End Sub

Private Sub List1_DblClick()
    Print "Double Clicked - " & Me.List1.List(Me.List1.ListIndex)
End Sub

请按照以下步骤操作:

  1. 点击项目#1
  2. 点击项目#2
  3. 再次点击项目#2
  4. 双击项目#2
  5. 双击项目#3

您将看到发生的各种动作组合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接