次の方法で共有


FormEvents.Merge イベント

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

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

構文

'宣言
Public MustOverride 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 InfoPath 2010 デザイン モード ユーザー インターフェイスからフォーム レベル イベントに対するイベント ハンドラーの追加だけを行います。デザイン モード ユーザー インターフェイスからフォーム テンプレートにイベント ハンドラーを追加すると、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 参照 (Visual Basic ではNothing ) または空の文字列を設定する。

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

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

クリックしたボタン

結合動作

[はい] ボタン

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

[すべてにはい] ボタン

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

[キャンセル] ボタン

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

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

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

重要

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

この型またはメンバーには、Microsoft InfoPath Filler で開かれたフォームを実行中のコードからのみアクセスできます。

次の例では、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 名前空間