我们开发了一个相当繁重的 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 中吗?可行吗?
我不期待一个完整的答案,但我期待一些帮助以走上正轨。有想法的朋友吗?