次の方法で共有


FormEvents.Merge イベント

定義

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

public:
 abstract event Microsoft::Office::InfoPath::MergeEventHandler ^ Merge;
public abstract event Microsoft.Office.InfoPath.MergeEventHandler Merge;
member this.Merge : Microsoft.Office.InfoPath.MergeEventHandler 
Public MustOverride Custom Event Merge As MergeEventHandler 

イベントの種類

例外

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

次の例では、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

注釈

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

Merge イベントは、デリゲートをMergeEventHandler使用してバインドされます。

Merge イベントは、 クラスの プロパティをCancelableArgs使用して Cancel プロパティを MergeEventArgstrue に設定することで取り消すことができます。

イベントを取り消す場合、InfoPath のしくみは、次の表で説明するように、 プロパティと MessageDetails プロパティをMessage設定するかどうかによって異なります。

Message プロパティだけにメッセージ文字列が設定されている。メッセージと "続行しますか? [はい]、[すべて]、[キャンセル] の各ボタンを使用します。
MessageDetails プロパティだけにメッセージ文字列が設定されている。"Microsoft Office InfoPath で、次の形式をマージする際に問題が発生しました: formname.xml。 [はい]、[すべて]、[キャンセル] ボタンを含む詳細メッセージ。
Message プロパティと MessageDetails プロパティの両方にメッセージ文字列が設定されている。設定されているメッセージと詳細メッセージ、および [はい]、[すべてにはい]、[キャンセル] の各ボタン。
Message プロパティと MessageDetails プロパティを設定したり、両方を null 参照 (Visual Basic では Nothing) または空の文字列に設定したりしないでくださいダイアログ ボックスは表示されません。

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

[はい] ボタン結合動作が行われ、ユーザーは結合される個別のフォームごとに [はい] をクリックする必要があります。
[すべてにはい] ボタン結合動作が行われ、選択されているすべてのフォームが結合されます。
[キャンセル] ボタンすべてのフォームの結合が取り消されます。 [キャンセル] をクリックする前にいずれかのフォームに対して [はい] をクリックした場合は、これらのフォームの結合も取り消されます。

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

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

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

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

適用対象