当我使用Interaction.CreateObject(“ Access.Application”)创建Access应用程序的COM对象实例时,便能够“使用Access的所有功能”,如设置.Visible = true或.UserControl = true,但是当我使用EXE文件启动Access,然后使用Interaction.GetObject(null,“ Access.Application”)尝试将Access实例附加到Access实例时,无法执行.Visible = true或.UserControl =正确,因为它会引发错误,说:您输入的表达式对属性Visible的引用无效
我不知道发生了什么。我试图在Internet上搜索一些相关内容,但没有发现任何有用的信息。
无论如何,这是我正在测试的代码:
using System;
using System.Threading;
using Microsoft.VisualBasic;
namespace Test1
{
class Program
{
const string TEST_DB_PATH = @"C:\Users\Administrator\Documents\db1.accdb";
public static void Main(string[] args)
{
dynamic accessApp = null;
try {
accessApp = Interaction.GetObject(null, "Access.Application");
} catch (Exception e) {
accessApp = Interaction.CreateObject("Access.Application");
}
Console.WriteLine("accessApp: " + accessApp);
Console.WriteLine("Version: " + accessApp.Version);
accessApp.Visible = true;
accessApp.OpenCurrentDatabase(TEST_DB_PATH);
Thread.Sleep(750);
accessApp.CloseCurrentDatabase();
accessApp.Quit();
/*
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
*/
}
}
}
如上所述,当我使用CreateObject创建Access的新实例时,一切正常。使用GetObject COM对象,我可以执行OpenCurrentDatabase,但不能执行.Visible = true,等等。
Windows 7 x64 Pro SP1,在Access 2007和2016中进行了尝试-两个版本的结果相同。
答案 0 :(得分:1)
这是预期的行为。
一旦UserControl
设置为True,则UserControl
和Visible
均为只读和True。
您可以通过测试UserControl
是否为真来解决此问题:
If(!accessApp.UserControl){accessApp.Visible = True;}