Ran*_*ask 9 .net ms-access interop winforms
我问是否可以在.Net表单中托管Microsoft Access表单.
不,我没有发疯,我们正在维护一个完全由VBA编写的大型系统,有些人不知道很多VBA试图将Microsoft Access用作IDE.它基本上是数千行意大利面条代码,虽然我们希望废弃它并从头开始,但这不是一种选择.
因此,我们正在努力改进那里的内容,在这种特殊情况下,如果我们可以以某种方式在.Net Windows窗体中托管Microsoft Access表单,那将非常有用,因为我们可以比.Net的专有硬件更有效地进行交互.我们可以从VB6.
我们目前有一个.Net应用程序,可以在计算机上运行,同时用户可以在任何时间打开许多MS-Access数据库,而.Net应用程序使用MS Access Interop与这些数据库进行交互,取得了不同程度的成功.这是因为它使用表单标题和文件名/位置来获取数据库的句柄以执行它需要做的事情,并且还依赖于用户不干扰/关闭应用程序/将数据库移动到他们的桌面等.这是一个有点乱.
因此,我问是否有可能以某种方式在.Net Windows窗体中托管Microsoft Access表单,可能通过将表单本身作为控件或子表单添加,以便能够直接访问所有控件在.Net的表格?
顺便说一句,在我们开始之前,如果……
...您违反了 Access Runtime EULA:
2. 附加许可要求和/或使用权利。
...
二. 分发要求。对于您分发的任何可分发代码,您必须...
- 保持用户界面中显示包含“由 Microsoft Office Access 提供支持”声明的状态栏,以便用户随时查看;
阅读 EULA(没那么长)可能是值得的,只是为了了解可以和不能使用 Access Runtime 做什么。
因此,我问是否可以通过某种方式在 .Net Windows 表单中托管 Microsoft Access 表单,方法是将表单本身添加为控件或子表单,这样我就可以直接访问所有控件来自.Net 的表单?
您可能想要反转该场景:在 Access 中运行 .NET 代码。
这基本上需要在 Visual Studio 中创建一个 Access 可以加载和操作的共享外接程序。从那里您可以连接控件和事件。
public void HookupControls(
Access.CommandButtonClass button,
Access.ListBoxClass listBox,
Access.TextBoxClass textBox1,
Access.TextBoxClass textBox2)
{
fillProductsButton = button;
fillProductsButton.Click +=
new Access.DispCommandButtonEvents_ClickEventHandler(
fillProductsButton_Click);
fillProductsButton.OnClick = "[Event Procedure]";
unitPriceTextBox = textBox1;
quantityTextBox = textBox2;
}
Run Code Online (Sandbox Code Playgroud)
它需要 Access 应用程序的一些配合:
With COMAddIns("SharedAddIn.Connect")
''// Make sure the COM add-in is loaded.
.Connect = True
''// Hook up the desired objects.
.Object.HookupControls Me.fillProductsButton, Me.productsListBox, _
Me.unitPriceTextBox, Me.quantityTextBox
End With
Run Code Online (Sandbox Code Playgroud)
免责声明:我想尝试一下,但在 Visual Studio 2012 中似乎缺少创建共享加载项的功能。YMMV。不过,文档中引用了共享加载项,所以也许我遗漏了某些内容,或者 VS 2012 RC 中没有该功能。
归档时间: |
|
查看次数: |
1421 次 |
最近记录: |