使用 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
属性,并且表单将具有其他属性,例如FormHeader
、FormFooter
、PageHeaderSection
、PageFooterSection
等,如果这些元素存在于表单中.这些属性中的每一个都有一个Controls
集合。您是否尝试过检查这些收藏?
嗨,我没有看到属性 Detail,我也没有看到 FormHeader 或 PageHeaderSection。我需要将表格转换为某些东西吗?谢谢
在 VBA 中,这些元素作为属性公开,而在 Office.Interop.Access 中,它们是 Sections 集合的成员。我已经发布了一些示例代码的答案。很抱歉造成混乱。
【参考方案1】:
如果表单中存在这些元素,所有表单都将有一个 Detail
部分,并且表单将具有其他部分,例如 FormHeader
、FormFooter
、PageHeaderSection
、PageFooterSection
等。这些部分中的每一个都有一个 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 仅在页眉部分(或正文或页脚)中获取控件的主要内容,如果未能解决你的问题,请参考以下文章