如何在C#模块中嵌入ms-access表单?

我们开发了相当重的ms访问应用程序,有大约300个表单(是的!)。 当代码实例化这些表单(并且不只是“打开”它们)时,我们可以在屏幕上显示同一表单的多个实例。

为了绕过VBA的局限性,以及一些面向对象概念(如inheritance,接口,封装等)的不良实现,代码管理:

  • 从我们表单的所有活动实例中创建的Windows集合。
  • 一个’ghost windows’对象,它包含我们代码所需的所有额外属性和方法。

因此,作为一个例子,当我想要达到我的一个实例的标准属性时,我可以写:

MyWindows.accessWindow(hWnd).name 

其中hWnd是Windows提供的句柄,并命名标准form()。name属性

但如果我想达到我的一个实例的特定属性,我可以写:

 MyWindows.ghostWindow(hWnd).originalRecordset 

其中’originalRecordset’包含原始的ADODB.recordset,它是在表单第一次实例化时加载的(意味着在用户做出任何更改之前……可能很有趣!)

它工作得很好,但编码它可以是一个真正的PITA,特别是当人们知道在C#中做类似的事情是多么明亮,只要可以将MS-Access表单对象封装到更通用的C#对象中。 所以这就是问题:可以将MS-Access表单嵌入到自制的C#dll中吗? 它可行吗?

我不希望得到完整的答案,但我希望能有一些帮助才能走上正轨。 好朋友好吗?

这应该可以通过Office Automation来实现。

简而言之,您使用c#启动访问应用程序,然后为表单获取正确的对象模型,就像在vba中使用它们一样。

这可能是第一步,如果你想要使用更多的c#(好),而不是更多的vba(meh)来逐步改进/重构你的访问应用程序。

MS KB文章“如何使用Visual C#自动化Microsoft Access”中的更多详细信息