【问题标题】:VB6 ListBox Click and DblClickVB6 ListBox Click 和 DblClick
【发布时间】:2010-10-01 15:06:27
【问题描述】:

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

谁有一个很好的解决方案来让 DblClick 事件处理程序代码运行而不首先执行 Click 代码?

提前感谢您的任何建议。

【问题讨论】:

    标签: vb6


    【解决方案1】:

    一个小技巧,但您可以使用 Timer 控件和布尔变量:

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

    我建议将计时器间隔设置为 Windows 双击时间设置,再加上一点(应该有一个 Windows API 调用会给你这个值)。

    【讨论】:

    • 打败我!我过去使用过同样的技术。
    【解决方案2】:

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

    1. 当你点击一个项目时,点击事件被触发。

    2. 当您单击 SAME 项目时,仍然会触发 click 事件。

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

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

    如果您双击一个新项目,那么用户会同时做两件事。选择一个新项目并执行双击项目。在这种情况下,首先触发单击,然后触发双击。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-03
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多