InfoPath 2010插件中的事件

本文关键字:事件 插件 2010 InfoPath | 更新日期: 2023-09-27 18:08:53

我目前正在尝试为InfoPath 2010填充/编辑器模式实现一个简单的插件,它在"插入"ribbon上添加了几个按钮,单击后会从另一个来源插入一些"模板"数据。

它工作得很好,但让我恼火的是,当用户没有选择字段时,它仍然是启用的,而插入工具栏上的所有其他按钮不知何故"知道"在当前上下文中不能插入任何内容,因此被禁用。

关于如何与底层XDocument交互的MSDN文档是完全足够的,但是我正在努力弄清楚的是如何从编辑UI交互或获取信息。

这就是我想要的:

  • 当用户在表单上从一个字段更改到另一个字段时触发的事件
  • 然后能够告诉用户当前正在输入数据的字段类型(即富文本,纯文本等),因此可以根据需要启用或禁用额外的按钮。

我认为这将是相当简单的,但我已经花了将近一天的时间通过所有我能找到的,并一无所获!

还是我完全没有抓住重点?

InfoPath 2010插件中的事件

几个月后,我终于可以回答我自己的问题了。并不是所有人都在使用InfoPath填充器,但万一有人使用,我的解决方案是:

我最初的问题有几点。

1)当用户从一个字段更改到另一个字段时触发的事件:

这在Ribbon Button XML中被指定为"getEnabled"属性。InfoPath每次认为按钮可能需要启用或禁用时调用指定的函数。我指定了:getEnabled="OnButtonGetEnabled",然后实现了一个小函数:

    public bool OnButtonGetEnabled(Office.IRibbonControl control)
    {
        ribbon.Invalidate();
        return HaveRichTextFieldSelected(GetContextXPath());
    }

在我的例子中,'ribbon'是我的Office.IRibbonUI实例。调用'Invalidate()'非常重要,否则InfoPath最终只调用一次。

2)如何确定用户所选字段的类型。

我仍然不满意我的解决方案,但至少我现在有一些工作。

我写了两个函数:

1: GetContextXPath()调用Globals.ThisAddIn.Application.ActiveWindow.XDocument.View.GetContextNodes(),从结果(向后遍历DOM树)构建一个XPath字符串

2: HaveRichTextFieldSelected()检查指定的XPath是否在manifest(其DOM树在Globals.ThisAddIn.Application.ActiveWindow.XDocument.Solution.DOM下)中属于'rich'类型

不管怎么说,我不会在这里发布所有涉及的代码,因为它太多了,所以答案,但这应该给一些有常识的人一个线索,如何实现这个