使用 Interop.Access 仅在页眉部分(或正文或页脚)中获取控件

Posted

技术标签:

【中文标题】使用 Interop.Access 仅在页眉部分(或正文或页脚)中获取控件【英文标题】:Using Interop.Access to get controls in just Header section (or Body or Footer) 【发布时间】:2014-02-25 16:34:34 【问题描述】:

您能否建议如何在 C# 中使用 Microsoft.Office.Interop.Access 来获取特定 Access 表单的标题部分的所有控件?

谢谢。

【问题讨论】:

所有表单都将具有Detail 属性,并且表单将具有其他属性,例如FormHeaderFormFooterPageHeaderSectionPageFooterSection 等,如果这些元素存在于表单中.这些属性中的每一个都有一个Controls 集合。您是否尝试过检查这些收藏? 嗨,我没有看到属性 Detail,我也没有看到 FormHeader 或 PageHeaderSection。我需要将表格转换为某些东西吗?谢谢 在 VBA 中,这些元素作为属性公开,而在 Office.Interop.Access 中,它们是 Sections 集合的成员。我已经发布了一些示例代码的答案。很抱歉造成混乱。 【参考方案1】:

如果表单中存在这些元素,所有表单都将有一个 Detail 部分,并且表单将具有其他部分,例如 FormHeaderFormFooterPageHeaderSectionPageFooterSection 等。这些部分中的每一个都有一个 Controls 集合。这是一个例子:

static void Main(string[] args)

    // this code requires the following COM reference in the project:
    // Microsoft Access 14.0 Object Library
    //
    var objAccess = new Microsoft.Office.Interop.Access.Application();
    objAccess.OpenCurrentDatabase(@"C:\Users\Public\Database1.accdb");

    string formName = "ClientForm";
    objAccess.DoCmd.OpenForm(formName, Microsoft.Office.Interop.Access.AcFormView.acDesign);
    Microsoft.Office.Interop.Access.Form frm = objAccess.Forms[formName];

    Console.WriteLine(String.Format("The FormHeader section of form [0] contains the following controls:", formName));
    foreach (Microsoft.Office.Interop.Access.Control ctl in frm.Section["FormHeader"].Controls)
    
        Console.WriteLine();
        Console.WriteLine(String.Format("    [0]", ctl.Name));
        Console.WriteLine(String.Format("        0", ctl.GetType()));
    
    objAccess.DoCmd.Close(Microsoft.Office.Interop.Access.AcObjectType.acForm, formName);
    objAccess.CloseCurrentDatabase();
    objAccess.Quit();

    Console.WriteLine();
    Console.WriteLine("Done.");
    Console.ReadKey();

控制台输出:

The FormHeader section of form [ClientForm] contains the following controls:

    [Auto_Logo0]
        Microsoft.Office.Interop.Access.ImageClass

    [Auto_Header0]
        Microsoft.Office.Interop.Access.LabelClass

Done.

【讨论】:

看起来我们必须硬编码节名frm.Section["FormHeader"]。是否可以获得从上到下排序的部分列表? @khoailang 请创建一个new question 以将这两个问题分开。 您对我如何获得该控件的“文本”有任何想法吗?例如,ctl.Name 或 ctl.Caption 或 ctl.Text ? @TsalGiorgos - 请ask a new question 并展示您到目前为止所做的尝试。 @GordThompson ***.com/questions/57925053/…

以上是关于使用 Interop.Access 仅在页眉部分(或正文或页脚)中获取控件的主要内容,如果未能解决你的问题,请参考以下文章

仅在 UIWebView 中显示网站的一部分

参考 Microsoft.Office.interop.access.dao.dll 导致错误 C#

滚动 tableView 部分的页脚和页眉

仅在第一页页眉上的图像

如何仅在正文上启用反弹过度滚动(而不是页眉和页脚)?

我正在扩展页眉和页脚,但是当我在页脚中传递数据时,它仅在主页上可见,在其他页面上不可见