簡體   English   中英

MS從無格式子窗體訪問VBA接收器(Catch)按下事件

[英]Ms access vba sink (catch) keydown event from a formless subform

我正在開發一個訪問程序,用於維護其他應用程序的測試數據。 它是通用程序,不適用於特定應用程序。 假定測試數據存儲在數據庫表中。 因為我的程序事先不知道哪些表是要聲明的應用程序的一部分,所以它從應用程序數據庫中讀取元數據,並為每個表創建鏈接表。 為了輸入和維護數據,我有一個帶有子窗體控件的窗體。 此子窗體控件沒有預定義的源對象。 通過將源對象屬性設置為“ table。[linkedtablename]”,可以將子窗體用於數據輸入。 當用戶從列表中選擇另一個應用程序表時,該另一個表將分配給子表單。 這個效果很好。 現在,我需要處理此子窗體中的事件。 因為子窗體源對象不是窗體,所以這不是很明顯。 沒有參數時,捕獲子窗體的事件是沒有問題的。 您可以編寫以下代碼:

Me.subformname.form.oncurrent = "=customoncurrent()"

但是如何捕捉按鍵事件呢? 帶有2個參數(鍵代碼,shift)引發此事件。

我不能寫:

Me.subformname.form.onkeydown = "=customkeydown()"

在運行時,VBA會引發錯誤,說明事件過程聲明中缺少參數。

我試圖使用'withevents'子句,但沒有成功。 也許我對該條款的可能性了解得很少。

這個問題可以解決嗎?

標記

您這里有一個很好的,簡約的解決方案。 但是,由於您添加了捕獲子表單事件的要求,因此它變得太簡單了!

您可以采取幾種方法,但我建議這樣做:

  • 構建通用子表單,設置為以DataSheet模式顯示
  • 將事件處理顯式添加到子窗體的類模塊
  • 在其中放置一堆具有通用名稱的文本框,例如Field01,Field02等。該數目應超過最大表中的最大列數
  • 當您鏈接到新表時,您的代碼會將表字段名稱放在文本框的ControlSource屬性中,在相關標簽中設置標題,並根據需要設置其他屬性
  • 最后,編寫代碼以隱藏未使用的文本框

這可能比其他方法要少。

順便說一句,不要在表單類模塊中使用WithEvents。 那只是在乞求麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM