InfoPath 2010加载项中的事件

时间:2011-09-16 15:49:12

标签: c# vsto ms-office infopath office-addins

我目前正在尝试为InfoPath 2010填充程序/编辑器模式实现一个简单的加载项,它在“插入”功能区上添加了几个按钮,在单击时从另一个源插入一些“模板”数据。

它运行正常,但令我烦恼的是,当用户没有选择字段时,它会保持启用状态,而插入工具栏上的所有其他按钮以某种方式“知道”在当前上下文中无法插入任何内容因此被禁用。

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

这就是我想要的:

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

我认为这会相当简单,但我花了将近一天的时间来查看我能找到的所有内容,并且已经空了!

或者我完全忽略了这一点?

1 个答案:

答案 0 :(得分:0)

几个月后,我终于可以回答我自己的问题了。并非所有人都使用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:调用Globals.ThisAddIn.Application.ActiveWindow.XDocument.View.GetContextNodes()的GetContextXPath(),从结果构建一个XPath字符串(向后遍历DOM树)

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

无论如何,我没有发布所有涉及的代码,因为它对于SO答案来说太过分了,但是这应该给某些具有一些常识的人提供关于如何实现它的线索。