如何在C#模块中嵌入ms-access表单?

Phi*_*ier 10 c# ms-access

我们已经开发了相当重的ms访问应用程序,有大约300个表单(是的!).当代码实例化这些表单(并且不只是"打开"它们)时,我们可以在屏幕上显示同一表单的多个实例.

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

  • 从我们表单的所有活动实例中创建的Windows集合.
  • 一个'ghost windows'对象,它包含我们代码所需的所有额外属性和方法.

因此,作为一个例子,当我想要达到我的一个实例的标准属性时,我可以写:

MyWindows.accessWindow(hWnd).name 
Run Code Online (Sandbox Code Playgroud)

其中hWnd是Windows提供的句柄,并命名标准form().name属性

但是如果我想要达到我的一个实例的特定属性,我可以写:

MyWindows.ghostWindow(hWnd).originalRecordset
Run Code Online (Sandbox Code Playgroud)

其中'originalRecordset'包含原始ADODB.recordset,它是在表单第一次实例化时加载的(意味着在用户进行任何更改之前......可能很有趣!)

它工作得很好,但是对它进行编码可能是一个真正的PITA,特别是当人们知道在C#中做类似的事情是多么明亮,只要可以将MS-Access表单对象封装到更通用的C#对象中.所以这就是问题:可以将MS-Access表单嵌入到自制的C#dll中吗?它可行吗?

我不希望得到一个完整的答案,但我期待一些帮助才能走上正轨.好朋友好吗?

Wam*_*Wam 3

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

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

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

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