簡體   English   中英

InfoPath 2010加載項中的事件

[英]Events in an InfoPath 2010 Add-in

我當前正在嘗試為InfoPath 2010 Filler / Editor模式實現一個簡單的加載項,該模式在“插入”功能區上添加了幾個按鈕,單擊這些按鈕可從其他來源插入一些“模板”數據。

它工作正常,但令我煩惱的是,當用戶未選擇任何字段時,它保持啟用狀態,而插入工具欄上的所有其他按鈕以某種方式“知道”不能在當前上下文中插入任何內容,因此被禁用。

關於如何與基礎XDocument進行交互的MSDN文檔非常合適,但是我正在努力弄清的是如何進行交互或從編輯UI中獲取信息。

這就是我想要的:

  • 用戶在表單上的字段之間切換時觸發的事件
  • 然后能夠分辨出用戶當前正在向哪種字段輸入數據(即,RTF,純文本等),因此可以根據需要啟用或禁用其他按鈕。

我以為這很簡單,但是我花了將近一天的時間仔細研究我能找到的所有內容,結果空無一物!

還是我完全錯過了重點?

幾個月后,我終於可以回答自己的問題了。 並不是說有人使用InfoPath填充器,但萬一有人使用,這是我的解決方案:

我最初的問題有幾點。

1)當用戶從一個字段切換到另一個字段時觸發的事件:

事實證明,這在功能區按鈕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答案來說太多了,但這應該為具有常識的人提供有關如何實現此方法的線索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM