我们开发了一个相当重的 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 中?可行吗?
我不期望得到完整的答案,但我期待一些帮助,以走上正确的道路。朋友们有什么想法吗?
这应该可以通过办公自动化来实现。
简而言之,您使用 C# 启动访问应用程序,然后为您的表单获取正确的对象模型,就像在 vba 中使用它们一样。
如果您想使用更多的 c#(好)和更少的 vba(meh)来逐渐改进/重构您的访问应用程序,这可能是第一步。
MS 知识库文章中的更多详细信息“如何使用 Visual C# 自动化 Microsoft Access” http://support.microsoft.com/kb/317114/en-us
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)