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