2012-12-19 37 views
10

我們開發了一個相當強大的ms訪問應用程序,有大約300個表單(是的!)。當代碼實例化這些表單(並且不只是「打開」它們)時,我們可以在屏幕上顯示同一表單的多個實例。如何在C#模塊中嵌入ms-access表單?

繞過VBA的限制,它的執行不力,一些面向對象的概念,如繼承,接口,封裝等,代碼管理:

  • 一個Windows集合做出來的所有我們表格的活動實例。
  • 'ghost windows'對象,它包含我們的代碼所需的所有額外屬性和方法。

所以,作爲一個例子,當我想達到我的實例中的一個標準特性,我可以這樣寫:

MyWindows.accessWindow(hWnd).name 

其中的hWnd是Windows提供的手柄,並將其命名爲標準形式()name屬性

但如果我要達到我的一個實例的一個特定的屬性,我可以寫:

MyWindows.ghostWindow(hWnd).originalRecordset 

在哪裏起源alRecordset'保存原始的ADODB.recordset,當窗體第一次被實例化時(意味着在用戶做出任何改變之前加載......可能是有趣的!)

它工作的很好,但是它的編碼可以是一個真正的PITA ,特別是當人們知道如何在C#中做類似的事情時,只要能夠將MS-Access表單對象封裝到更通用的C#對象中即可。所以這是一個問題:能否將MS-Access表單嵌入到自制的C#dll中?這是否可行?

我不期待一個完整的答案,但我期待一些幫助走上正確的軌道。任何想法的朋友?

+2

技術上令人印象深刻,但商業和維護雷區?建議你開始的增量重新寫。將您的應用程序的一部分重寫爲基於域的垂直行業清晰劃分已在過去爲我工作。結果是你獲得更多的C#。 –

回答

3

這應該通過Office自動化來實現。

簡而言之,您使用c#啓動您的訪問應用程序,然後爲您的表單獲取正確的對象模型,這與您在vba中使用它們的方式相同。

這可能是第一步,如果你想使用更多的C#(好),並減少VBA(兆),以逐步改善/重構你的訪問應用程序。

的MS知識庫文章中的更多細節"How to automate Microsoft Access by using Visual C#"

+1

感謝您的鏈接。那裏可能有一些有趣的事情 –