0

現在、InfoPath 2010 フィラー/エディター モード用の単純なアドインを実装しようとしています。これにより、[挿入] リボンにいくつかのボタンが追加され、クリックすると別のソースからいくつかの「テンプレート」データが挿入されます。

それは正常に動作しますが、私を悩ませているのは、ユーザーがフィールドを選択していない場合、挿入ツールバーの他のすべてのボタンが何らかの形で現在のコンテキストに何も挿入できないことを「知っている」ため、無効になっている間、有効なままになることです。

基礎となる XDocument と対話する方法に関する MSDN ドキュメントは完全に適切ですが、私が理解するのに苦労しているのは、編集 UI から対話または情報を取得する方法です。

これは私がしたいことです:

  • ユーザーがフォームのフィールドからフィールドに移動したときに発生するイベント
  • 次に、ユーザーが現在データを入力しているフィールドの種類 (つまり、リッチ テキスト、プレーン テキストなど) を識別できるようにして、必要に応じて追加のボタンを有効または無効にできるようにします。

これはかなり簡単なことだと思っていましたが、ほぼ 1 日かけて見つけたものすべてを調べた結果、空っぽになりました。

それとも、ここでポイントを完全に逃しましたか?

4

1 に答える 1

0

数か月後、ようやく自分の質問に答えることができます。誰もが InfoPath フィラーを使用しているわけではありませんが、誰かが使用している場合に備えて、私の解決策は次のとおりです。

私の元の質問にはいくつかのポイントがあります。

1) ユーザーがフィールドからフィールドに移動したときに発生するイベント:

これは、リボン ボタン XML で「getEnabled」属性として指定されていることが判明しました。InfoPath は、ボタンを有効または無効にする必要があると判断するたびに、指定された関数を呼び出します。私の場合は、getEnabled="OnButtonGetEnabled" を指定してから、小さな関数を実装しました。

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

私の場合、「リボン」は Office.IRibbonUI のインスタンスです。'Invalidate()' を呼び出すことは非常に重要です。そうしないと、InfoPath はこれを 1 回だけ呼び出すことになります。

2) ユーザーが選択したフィールドのタイプを判別する方法。

これに対する私の解決策にはまだ満足していませんが、少なくとも今はうまくいくものがあります。

私は2つの関数を書きました:

1: Globals.ThisAddIn.Application.ActiveWindow.XDocument.View.GetContextNodes() を呼び出す GetContextXPath() は、結果から XPath 文字列を作成します (DOM ツリーを逆方向にたどります)。

2: 指定された XPath がマニフェスト (その DOM ツリーは Globals.ThisAddIn.Application.ActiveWindow.XDocument.Solution.DOM の下にある) で「リッチ」タイプであるかどうかをチェックする HaveRichTextFieldSelected()

とにかく、SOの回答には多すぎるため、ここに含まれるすべてのコードを投稿しているわけではありませんが、これを実装する方法について、常識のある人に手がかりを与えるはずです。

于 2012-04-04T13:51:37.027 に答える