【问题标题】:Get the text of Headers and Footers in Access using Interop.Access使用 Interop.Access 在 Access 中获取页眉和页脚的文本
【发布时间】:2019-09-13 13:59:12
【问题描述】:
using AccessApi = Microsoft.Office.Interop.Access;

  foreach (AccessApi.Control control in ap.Forms[formName].Section[AccessApi.AcSection.acHeader].Controls)
    {
       logger.Info(control.Name);
    }

但是有了这些,我得到了控件的名称(AutoLogo 或 AutoTitle)。例如,我想获取 Title 的文本。我该怎么做?

【问题讨论】:

    标签: c# ms-access


    【解决方案1】:

    最终我无法访问control.Valuecontrol.Caption 的方式是因为它不是@Unhandled Exception 所说的LabelClass 属性。所以我这样做了:

    foreach (AccessApi.Control control in ap.Forms[formName].Section[AccessApi.AcSection.acHeader].Controls)
    {
        Type t = control.GetType();
        if (t.Equals(typeof(AccessApi.LabelClass)))
        {
            AccessApi.Label label = (AccessApi.Label)control;
            logger.Info(label.Caption);
        }
    }
    

    【讨论】:

      【解决方案2】:

      你能试试这个方法吗?

      如果表单中存在这些元素,则所有表单都将有一个详细信息部分,并且表单将具有其他部分,例如 FormHeader、FormFooter、PageHeaderSection、PageFooterSection 等。这些部分中的每一个都有一个 Controls 集合。这是一个例子:

      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();
      

      【讨论】:

        【解决方案3】:

        这取决于您要从中读取文本的控件类型。

        • 如果是文本框,则使用control.Value
        • 如果是标签,则使用control.Caption

        【讨论】:

        • 我有一个标签,但是当我写 control.Captioncontrol.Value 时,我收到一个编译错误,即“控件”不包含“标题”或“值”的定义。
        • 如果您只是遍历本节中的所有控件,那么您可能还针对不支持任何这些属性的控件。您知道要从中读取文本的控件的名称吗?然后尽量不要循环,而是按名称访问它们。
        • 试试这个来访问命名控件的标签怎么样:ap.Forms[formName].Controls["YourControl"].Value(用正确的控件名称交换YourControl)?这行得通吗?如果没有,这是ap.Forms[formName].Controls["YourControl"].Name 吗?
        • ap.Forms[formName].Controls["YourControl"].Name 工作,我得到了与上面提到的control.Name 完全相同的结果。 .Value 再次不是我图书馆的成员!
        • 好的,这意味着 API 似乎不知道这个属性。我可以假设,您将(如果可能)使用AccessApi.Label 之类的东西而不是AccessApi.Control 作为标签。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 2020-08-23
        • 2018-08-08
        • 1970-01-01
        • 2011-12-29
        相关资源
        最近更新 更多