10

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

为了绕过 VBA 的限制,以及它对一些面向对象概念(如继承、接口、封装等)的糟糕实现,代码管理:

  • 由我们表单的所有活动实例组成的 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 中吗?可行吗?

我不期待一个完整的答案,但我期待一些帮助以走上正轨。有想法的朋友吗?

4

1 回答 1

3

这应该可以通过办公自动化来实现。

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

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

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

于 2012-12-20T09:32:03.513 回答