2017-05-24 155 views
1

我在ms-access的窗體上有一個按鈕,其中有一個「點擊」和「點擊Dbl Click」事件。我遇到了單擊事件可以工作的問題,但雙擊不會發生,除非第二次點擊,否則我會一直按住它並在釋放它之前將鼠標從按鈕上移開。這個按鈕的作用是根據2次不同的點擊,用特定的文本填充文本框。它如何解決這個雙擊問題?下面是按鈕的代碼。請注意,Task_ID_AfterUpdate()還通過在查詢中查找,根據Me.Task_ID的內容填充文本字段。帶有點擊和雙擊事件(VBA)的MS Access按鈕

'single click 
Private Sub getBtn_Click() 
    btnUpdateHelper (1162) 
End Sub 

'double click 
Private Sub getBtn_DblClick(cancel As Integer) 
    btnUpdateHelper (1449) 
End Sub 

Private Sub btnUpdateHelper(Task As Variant) 
    'helper method for buttons, only pass task id 
    'Me.Task_ID is a textfield 
    Me.Task_ID = Task 
    Task_ID_AfterUpdate 
End Sub 

Private Sub Task_ID_AfterUpdate() 
    Dim taskIdNum As String 
    taskIdNum = Me.Task_ID 
    'updates all fields to display the selected task 
    Me.Area = DLookup("Area", "Query", "TaskID=" & taskIdNum) 
    Me.Activity = DLookup("Activity", "Query", "TaskID=" & taskIdNum) 
    Me.Description = DLookup("Description", "Query", "TaskID=" & taskIdNum) 
    Me.Comments = DLookup("Comments", "Query", "TaskID=" & taskIdNum) 
    Me.Task_Group = DLookup("[Task Group]", "Query", "TaskID=" & taskIdNum) 
    Me.Mul = DLookup("Mul", "Query", "TaskID=" & taskIdNum) 
    Me.Time = DLookup("Time", "Query", "TaskID=" & taskIdNum) 
End Sub 
+1

這是一個非常奇怪的UI設計。我可以建議使用右鍵單擊還是Shift +單擊來選擇備用功能?使用'_MouseDown'事件來捕獲這些事件。 – Andre

+0

@Andre謝謝你!如果您將此作爲答案提交,我會接受它 – Kayracer

回答

1

ClickDblClick事件上的按鈕是海事組織相當混亂的UI設計。更好的方法是使用右鍵單擊或Shift +單擊(或Alt或Ctrl)以獲得其他功能。

Click事件不會捕獲這些修飾符,只有MouseDownMouseUp。如果將這些動作放入事件過程MouseUp中,則感覺最自然。

Private Sub cmdMultiClick_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 

    Dim SelectedFunction As String 

    If Button = acLeftButton Then 
     If (Shift And acShiftMask) Then 
      SelectedFunction = "Shift-Left click!" 
     Else 
      SelectedFunction = "Left click!" 
     End If 
    ElseIf Button = acRightButton Then 
     SelectedFunction = "Right click!" 
     ' Cancel the default right-click behavior (open context menu) 
     DoCmd.CancelEvent 
    End If 

    MsgBox SelectedFunction, vbInformation 

End Sub