次の方法で共有


FormEvents.Merge イベント

[フォームの結合] コマンドがユーザー インターフェイスから起動されると、または /aggregate コマンド ライン スイッチを指定して InfoPath が開始されると発生します。

名前空間: Microsoft.Office.InfoPath
アセンブリ: Microsoft.Office.InfoPath (microsoft.office.infopath.dll 内)

構文

'宣言
Public Event Merge As MergeEventHandler
'使用
Dim instance As FormEvents
Dim handler As MergeEventHandler

AddHandler instance.Merge, handler
public abstract event MergeEventHandler Merge

例外処理

例外の種類 条件

InvalidOperationException

開発者は、InternalStartup メソッドとは異なる場所でイベントをバインドしようとしました。

コメント

メモ重要 :

Merge イベントは、フォーム コードで開発者がインスタンス化するためのものではありません。開発者は、Microsoft Office InfoPath 2007 デザイン モード ユーザー インターフェイスからフォーム レベル イベントに対するイベント ハンドラの追加だけを行います。デザイン モード ユーザー インターフェイスからフォーム テンプレートにイベント ハンドラを追加すると、InfoPath は、EventManager クラスおよび FormEvents クラスのメンバを使用してフォーム コード ファイルの InternalStartup メソッドにコードを生成し、イベントをイベント ハンドラにバインドします。InfoPath のデザイン モードでイベント ハンドラを追加する方法の詳細については、「[方法] イベント ハンドラを追加する方法」を参照してください。

Merge イベントは、MergeEventHandler 代理を使用してバインドされます。

MergeEventArgs クラスの CancelableArgs プロパティを使用して Cancel プロパティを true に設定することで、Merge イベントをキャンセルできます。

イベントをキャンセルした場合の InfoPath の動作は、Message プロパティと MessageDetails プロパティの設定に応じて、次の表のようになります。

Message および MessageDetails の設定

表示されるダイアログ ボックスとテキスト

Message プロパティだけにメッセージ文字列が設定されている。

設定されているメッセージと "続行しますか?" というメッセージ、および [はい]、[すべてにはい]、[キャンセル] の各ボタン。

MessageDetails プロパティだけにメッセージ文字列が設定されている。

"次のフォームの結合時にエラーが発生しました : フォーム名.xml。" というメッセージと設定されている詳細メッセージ、および [はい]、[すべてにはい]、[キャンセル] の各ボタン。

Message プロパティと MessageDetails プロパティの両方にメッセージ文字列が設定されている。

設定されているメッセージと詳細メッセージ、および [はい]、[すべてにはい]、[キャンセル] の各ボタン。

Message プロパティと MessageDetails プロパティに設定しない。または、両方に null または空の文字列を設定する。

ダイアログ ボックスは表示されません。

ユーザーが [はい]、[すべてにはい]、[キャンセル] の各ボタンをクリックしたときの動作は次のとおりです。

クリックしたボタン

結合動作

[はい] ボタン

結合動作が行われ、ユーザーは結合される個別のフォームごとに [はい] をクリックする必要があります。

[すべてにはい] ボタン

結合動作が行われ、選択されているすべてのフォームが結合されます。

[キャンセル] ボタン

すべてのフォームの結合がキャンセルされます。[キャンセル] をクリックする前にいずれかのフォームに対して [はい] をクリックした場合は、これらのフォームの結合もキャンセルされます。

MergeEventArgs オブジェクトは、フォームの Merge イベントのイベント ハンドラに対するパラメータとして渡されます。MergeEventArgs オブジェクトが提供するプロパティを Merge イベントの間に使用すると、フォームの基になっている XML ドキュメントとプログラム的に対話して、結合するファイルの数などの結合プロパティを判別できます。MergeEventArgs オブジェクトが提供するプロパティは、このイベントの間にだけ使用できます。

単一のフォーム結合操作の間、Merge イベントは結合されるファイルごとに 1 回ずつ発生し、そのイベント ハンドラのコードが実行されます。

メモ重要 :

InfoPath 2003 オブジェクト モデルには、結合操作が完了した後に発生する OnAfterImport イベントがあります。Microsoft Office InfoPath 2007 オブジェクト モデルにも同等のイベントがあります。これと同じ機能は、Merge イベントのイベント ハンドラでも実現できます。それには、"結合後" の操作を実行する前に、MergeEventArgs クラスの Index プロパティと Count プロパティの値を比較して、結合操作が完了したことを確認します。

この型またはメンバは、Microsoft Office InfoPath 2007 で開いているフォームで実行されているコードからのみアクセスできます。

次の例では、Merge イベントのイベント ハンドラは、結合操作の状態を示す変数を設定し、XmlForm クラスの MergeForm(XPathNavigator) メソッドを呼び出して結合操作を実行し、結合が終了するとメッセージを表示します。

private bool _merging = false;
public void FormEvents_Merge(object sender, MergeEventArgs e)
{
   // Set global property to indicate that forms are being merged.
   if (e.Index == 0)
   {
      _merging = true;
   }
   // Merge the current form.
   MergeForm(e.Xml);
   e.CancelableArgs.Cancel = false;

   // Check to see if merging is finished.
   if ((e.Index + 1) == e.Count)
   {
      _merging = false;
      MessageBox.Show("Your request to merge " + e.Count + 
         " files is now complete.");
      // Perform any "after merge" operations here.
   }
}
Private _merging As Boolean = False
Public Sub FormEvents_Merge(ByVal sender As Object, _
   ByVal e As MergeEventArgs)
   ' Set global property to indicate that forms are being merged.
   If (e.Index = 0) Then
      _merging = True
   End If

   ' Merge the current form.
   MergeForm(e.Xml)
   e.CancelableArgs.Cancel = False

   ' Check to see if merging is finished.
   If ((e.Index + 1) = e.Count) Then
      _merging = False
      MessageBox.Show("Your request to merge " + e.Count + 
         " files is now complete.")
      ' Perform any "after merge" operations here.
   End If
End Sub

関連項目

参照

FormEvents クラス
FormEvents のメンバ
Microsoft.Office.InfoPath 名前空間