我们开发了相当重的ms访问应用程序,有大约300个表单(是的!)。当代码实例化这些表单(而不仅仅是“打开”它们)时,我们可以在屏幕上显示同一表单的多个实例。
为了绕过VBA的限制,以及一些面向对象概念(如继承,接口,封装等)的不良实现,代码正在管理:
所以,作为一个例子,当我想要达到我的一个实例的标准属性时,我可以写:
MyWindows.accessWindow(hWnd).name
其中hWnd是Windows提供的句柄,并命名标准格式()。name property
但是如果我想要达到我的一个实例的特定属性,我可以写:
MyWindows.ghostWindow(hWnd).originalRecordset
其中'originalRecordset'包含原始的ADODB.recordset,它是在表单首次实例化时加载的(意味着在用户做出任何更改之前......可能很有趣!)
它工作得很好,但是对它进行编码可能是一个真正的PITA,特别是当人们知道在C#中做类似的事情是多么明亮,只要可以将MS-Access表单对象封装到更通用的C#对象中。所以这就是问题:可以将MS-Access表单嵌入到自制的C#dll中吗?它可行吗?
我不希望得到一个完整的答案,但我期待一些帮助才能走上正轨。好朋友好吗?
答案 0 :(得分:3)
这应该可以通过Office Automation来实现。
简而言之,您使用c#启动访问应用程序,然后为表单获取正确的对象模型,就像在vba中使用它们一样。
这可能是第一步,如果你想要使用更多的c#(好),而不是更多的vba(meh)来逐步改进/重构你的访问应用程序。
MS KB文章"How to automate Microsoft Access by using Visual C#"
中的更多详细信息