我们开发了相当繁重的ms访问应用程序,大约有300种格式(是的!).由于代码实例化这些形式(并且不仅仅是打开它们),我们可以在屏幕上显示相同形式的多个实例.
为了绕过VBA的局限性,以及一些面向对象的概念(如继承,接口,封装等)的不良实现,代码正在管理:
>从我们表单的所有活动实例中创建的一个窗口集合.
>一个’ghost windows‘对象,其中包含我们的代码所需的所有额外的属性和方法.
所以,作为一个例子,当我想达到我的一个实例的标准属性时,我可以写:
MyWindows.accessWindow(hWnd).name
其中hWnd是由Windows给出的句柄,并命名标准的form().name属性
但是如果我想要达到我的一个实例的特定属性,我可以写:
MyWindows.ghostWindow(hWnd).originalRecordset
“originalRecordset”保存原始ADODB.recordset,原来的ADODB.recordset在表单第一次被加载时被加载(意味着在用户进行任何更改之前…可以是有趣的!)
它的工作非常好,但是编码可以是一个真正的PITA,特别是当知道如何在C#中做类似的操作时,只要将MS-Access表单对象封装到更通用的C#对象中即可.所以这是一个问题:可以将MS-Access表单嵌入到自制的C#dll中吗?可行吗
我不期待一个完整的答案,但我希望有一些帮助可以走上正轨.有什么想法吗?
解决方法
这应该通过Office Automation来实现.
简而言之,您使用c#启动您的访问应用程序,然后为您的表单获取正确的对象模型,与在vba中可用的相同.
这可能是第一步,如果你想使用更多的c#(好),少一些vba(meh)逐渐改善/重构你的访问应用程序.
MS KB文章“How to automate Microsoft Access by using Visual C#”中的更多详细信息