2013-10-16 13 views
2

如上所述,這是一個Access 2010 .accdb。當browseto從子窗體而不是父窗體調用時,爲什麼Access 2010不會觸發窗體卸載事件?

我有一個主要的導航窗體:frmNav。

在frmNav我有一個導航子窗體控件:NavigationSubForm。

我使用docmd browseto在導航控件的選項卡之間移動。

在NavigationSubForm控件中加載的第一種形式是frmInboundShipments。

frmInboundShipments包含一個子窗體控件sfrmListInvoicesByShipment。

sfrmListInvoicesByShipment包含與frmInboundShipments中的每個貨件相關的發票過濾數據表。

frmItemInvoices包含sfrmListInvoicesByShipment中引用的發票。

frmInboundShipments和frmItemInvoices之間移動使用browseto命令的下列方法觸發上frmInboundShipments卸載事件:

  1. 點擊命令按鈕上frmInboundShipments調用browseto到frmItemInvoices
  2. 點擊在frmNav上的導航控件上的導航選項卡/按鈕來調用browseto frmItemInvoices。

然而,當我執行以下操作(S),在frmInboundShipments 卸載事件未能觸發

  1. 一個字段/數據錶行雙擊在sfrmListInvoicesByShipment來觸發browseto命令可通過以下任一方式顯示/移動到frmItemInvoices:

    a。立即執行docmd browseto以顯示frmItemInvoices

    b。第一父窗體上設置焦點,然後執行的DoCmd browseto顯示frmItemInvoices

    i. e.g.: Me.Parent.sfrmListInvoicesByShipments.SetFocus 
    
          DoCmd.BrowseTo acBrowseToForm, "frmItemInvoices", "frmNav.NavigationSubform", ...criteria.... 
    

我無法理解我的生活爲什麼當browseto命令從發佈的事件不觸發子窗體,但在兩種窗體之間導航時在其他場景中觸發。

我已經看過Access 2010中的事件順序,並沒有看到任何明確指出主窗體的Unload事件在移動到查看子窗體中的其他窗體時不會觸發的任何事情。

在這種情況下,停用事件也不會觸發。

更新,10/18/13:進一步調查顯示父窗體的Close事件確實觸發,但絕對不是停用或卸載事件。問題是,一旦表單關閉事件發生,我想要捕獲的值已經消失。不知道從這裏做什麼...

+0

我現在還不能關閉它,但我確實找到了解決方法:當從子窗體調用browseto時,我決定移動數據捕獲,而不是在父窗體的unload事件中捕獲值到子窗體控件的Enter事件。最終結果可能是它更頻繁地寫入,當用戶選中子窗體控件或搜索該窗體中的值時,等等。最終,它完成了目標。我仍然很想知道爲什麼卸載不會觸發。至少在這種情況下,關於子表單的事件順序的MS文檔實際上是不足的。 – rudelerius

+0

我發現在Access中爲了使表單被處置,它需要關閉然後處置。在我以前的使用中,VBA不允許公開(可見或不可)的表格。不幸的是,當涉及到VBA時,如果你不告訴它這麼做,那麼你將不得不細化它,這並不意味着它。 – GoldBishop

+0

您是否嘗試過從父窗體而不是子窗體觸發BrowseTo命令?如果有(如我所假設的)一個變量對子窗體很重要,那麼可以將它傳遞給公共字符串,並在觸發代碼時使用該字符串? – BFWebAdmin

回答

0

rudelerius,

我感到你的痛苦。我有長期的經驗調試Access窗體事件,並已與一些規則來走:

  1. 表事件,當你希望他們不要總是閃光。
  2. 表單事件並不總是以特定順序觸發,儘管文檔可能會說。
  3. 最後,通過在事件過程中放置​​斷點進行調試可以更改發生事件的訂單號碼

那麼你能做什麼?我的建議:

  1. 表單事件用於處理表單級別的操作。它們只是管道工程,不應該使用應用程序級功能來超載它們
  2. 將您的應用程序或業務邏輯與表單分開,尤其是不要將業務邏輯插入任何表單或報表事件。換句話說,支持什麼你的應用程序所做的代碼應該與分開,它如何它。
  3. 對於調試,在事件過程中使用類似Debug.Print的東西,並避免斷點。

那麼,這對您有何幫助?我的(必然廣泛的)答案將您想要保留的任何信息放入外部模塊級變量或類,然後進行表單操作。然後您的主表單可以使用這些信息而不依賴於孩子的狀態。

相關問題