2009-01-15 84 views
2

當用戶單擊或雙擊VB6 ListBox控件中的項目時,需要運行不同的代碼。當我點擊控件時,Click事件處理程序執行。但是,我發現當我雙擊控件時,Click和DblClick事件處理程序都會執行。VB6 ListBox Click and DblClick

任何人都有一個很好的解決方案,只要DblClick事件處理程序代碼在沒有首先執行Click代碼的情況下運行?

在此先感謝您的任何建議。

回答

3

輕微的黑客,但你可以使用Timer控件和一個布爾變量:

  • 開始的Click事件計時器,布爾變量布爾變量設置爲false
  • 設置爲true DoubleClick事件
  • 當計時器滴答事件觸發,檢查布爾變量來查看用戶是否做了點擊或DoubleClick

我建議計時器的時間間隔設置到W indows雙擊時間設置,再加上一點(應該有一個Windows API調用會給你這個值)。

+0

擊敗我吧!我過去使用過相同的技術。 – 2009-01-15 15:59:37

1

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

  1. 當您點擊某個項目時,會觸發點擊事件。

  2. 當你點擊SAME項目時,click事件仍然被觸發。

  3. 當您雙擊該項目時,會觸發點擊事件和雙擊事件。

注#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

您將看到發生的各種操作組合。