VB6 ListBox Click和DblClick

时间:2009-01-15 15:52:54

标签: vb6

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

任何人都有一个很好的解决方案,只需要在没有首先执行Click代码的情况下运行DblClick事件处理程序代码?

提前感谢任何建议。

2 个答案:

答案 0 :(得分:3)

轻微破解,但您可以使用Timer控件和布尔变量:

  • 在Click事件上启动计时器,将布尔变量设置为false
  • 在DoubleClick事件
  • 上将布尔变量设置为true
  • 当计时器Tick事件触发时,检查布尔变量以查看用户是否执行了Click或DoubleClick

我建议将计时器间隔设置为Windows双击时间设置,加上一点(应该有一个Windows API调用可以为您提供此值)。

答案 1 :(得分:1)

Visual Basic 6中列表控件的行为如下所示。

  1. 点击某个项目时会触发点击事件。

  2. 当您点击相同项目时,点击事件仍会被触发。

  3. 双击该项目时,点击事件和双击事件都会被触发。

  4. 注意#2。您需要做的是在您使用的表单中包含当前项目。每次检查点击事件时,您首先要查看当前项目是否与您单击的项目相同。如果它不是同一个项目,则通常会处理点击事件。

    如果双击新项目,则用户同时执行两项操作。选择新项目并执行双击项目。在这种情况下,首先触发点击,然后双击。

    此序列与控件执行您想要的操作没有什么不同。与单击新项目等待X秒然后双击同一项目相同。

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

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

    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项
    6. 您将看到各种动作组合。