2013-06-27 54 views
1

目標:使用第一個GotFocus過程將焦點從一個命令按鈕重定向到另一個命令按鈕。由另一個SetFocus啓動的GotFocus過程中的SetFocus

上下文:我在通用模塊中有一個與表單無關的過程,在大多數表單上,在保存上一條記錄後,將焦點設置到NewRecord按鈕。但是在一種形式中,我想重定向(基於某些條件)焦點回到SignRecord按鈕,這樣用戶就可以「簽名」同一記錄的第二部分(我將來可能需要這個部分用於其他用途)。目標控件已啓用且可見,並且可在其他情況下進行聚焦,並且在未發生重定向時可以集中原始控件。下面的參考文獻[2]意味着這應該是可能的,儘管我沒有改變我的控件的可見性。

問題:當在GotFocus過程中符合條件以重定向焦點時,它將根據需要重定向,但原始(測試)SetFocus調用將引發「運行時錯誤」2110',無法將焦點移動到控件CommandNew」。

我試過的東西:
Exit Sub後我的下游SetFocus調用。
Call CommandSign.SetFocus希望它可以在以前的SetFocus過程之外發生。

在模塊中,

Public Sub test() 
    Forms("TargetForm").CommandNew.SetFocus 'This gets the error '2110' 
End Sub 

在 'TargetForm',

Private Sub CommandNew_GotFocus() 
    If IsNull(textDateTime) Then Exit Sub 'Works as expected 

    'I can see these two parts work. The framSign value changes 
    'and CommandSign gets focus 
    If checPPC And IsNull(textSigID_PPC) And framSign = 2 Then 
     framSign = 1 
     CommandSign.SetFocus 
    ElseIf checDAS And IsNull(textSigID_DAS) And framSign = 1 Then 
     framSign = 2 
     CommandSign.SetFocus 
    End If 
End Sub 

參考文獻:
[1]:SelectNextControl() a bad idea in a GotFocus event?
[2]:http://www.access-programmers.co.uk/forums/showthread.php?t=100071

+0

有趣的是,當CommandNew按鈕,通過點擊,然後拖曳關獲得焦點,這個工作沒有問題。 – usncahill

+0

如果從有問題的表單上的測試按鈕發送了「SetFocus」調用,也會出現此錯誤「2110」。 – usncahill

回答

1

我想您的問題是,撥打Forms("TargetForm").CommandNew.SetFocus似乎並不完全像,直到Private Sub CommandNew_GotFocus()完成執行後才完成重點設置。由於您在第一個SetFocus完成之前調用了另一個SetFocus,所以存在Access似乎無法應對的衝突。

不管是不是這種情況,有一件事很清楚:您現在設置執行計劃的方式不幸並不奏效。您可以嘗試爲每個表單添加全局變量或公共變量,以確定您是否應將焦點設置爲CommandSign之後將焦點設置爲CommandNew

Ex。 TargetForm:

Public boolSetCommandSignFocusInstead As Boolean 

Private Sub CommandNew_GotFocus() 
    If IsNull(textDateTime) Then Exit Sub 'Works as expected 

    'I can see these two parts work. The framSign value changes 
    'and CommandSign gets focus 
    If checPPC And IsNull(textSigID_PPC) And framSign = 2 Then 
     framSign = 1 
     boolSetCommandSignFocusInstead = True 
    ElseIf checDAS And IsNull(textSigID_DAS) And framSign = 1 Then 
     framSign = 2 
     boolSetCommandSignFocusInstead = True 
    Else 
     boolSetCommandSignFocusInstead = False 
    End If 
End Sub 

模塊:

Public Sub test() 
    Forms("TargetForm").CommandNew.SetFocus 
    If Forms("TargetForm").boolSetCommandSignFocusInstead Then 
     Forms("TargetForm").CommandSign.SetFocus 
    End If 
End Sub 
+0

是的,我非常傾向於這個答案。謝謝你的寫作。 – usncahill