次の方法で共有


[方法] InfoPath 2003 オブジェクト モデルを使用してフォーム イベントに応答する方法

ユーザーがフォームに入力する際に発生する各種イベントに応答するコードを書くことができます。InfoPath 内でイベントの作業を実行するには、デザイン モードのフォームからイベント ハンドラを作成します。

InfoPath イベント ハンドラは、最初にデザイン モードで作成してください。これは、InfoPath 2003 互換のオブジェクト モデルを使用する際、InfoPath が、イベント ハンドラを識別およびシンクするために、フォームのコード ファイル (FormCode.cs または FormCode.vb) 内で、自動的に正しい宣言を追加し、属性 (InfoPathEventHandlerAttribute) を適用するためです。イベント ハンドラを作成した後は、フォームのコード ファイル内で宣言と属性を変更しないでください。

InfoPath イベント ハンドラの作成については、「[方法] InfoPath 2003 オブジェクト モデルを使用してイベント ハンドラを追加する方法」を参照してください。

イベント オブジェクトの概要

InfoPath 2003 互換オブジェクト モデルには、Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間で公開される 9 つのイベント オブジェクトが実装されています。次の表には、それぞれの InfoPath イベント オブジェクト、関連付けられているイベント ハンドラ、およびそれらが提供する機能の説明が一覧表示されています。

名前 イベント ハンドラ 説明

DataDOMEvent

OnBeforeChange

OnValidate, OnAfterChange

XML Document Object Model (DOM) の変更中に、フォームの基になる XML ドキュメントへの参照、リターン状態、およびその他の XML ノードに関する情報を含むプロパティを返します。エラーを発生させるメソッドも含みます。

DocActionEvent

OnClick

フォーム領域内でのボタン クリック中に、フォームの基になる XML ドキュメントへの参照、リターン状態、およびソース XML ノードを返します。

DocContextChangeEvent

OnContextChange

フォームの基になる XML ドキュメントの現在のコンテキストである XML Document Object Model (DOM) ノードに関する情報を返します。

DocEvent

OnSwitchView, OnAfterImport

ビューの切り替えやフォームの結合操作中に、フォームの基になる XML ドキュメントへの参照を返します。

DocReturnEvent

OnLoad, OnSubmitRequest

フォームの読み込みまたは送信中に、フォームの基になる XML ドキュメントへの参照と、リターン状態を返します。

MergeEvent

OnMergeRequest

フォームの基となる XML ドキュメントをプログラムから操作したり、結合するファイルの数などの結合プロパティを調べたりするために、OnMergeRequest イベント中に使用できるプロパティとメソッドを返します。

SaveEvent

OnSaveRequest

フォームの基となる XML ドキュメントをプログラムから操作したり、保存プロパティを指定したり、保存操作を実行したりするために、OnSaveRequest イベント ハンドラからの保存操作中に使用できるプロパティとメソッドの数を返します。

SignEvent

OnSign

デジタル署名に追加データを追加するために使用します。

VersionUpgradeEvent

OnVersionUpgrade

バージョン アップグレード操作中に、フォームの基となる XML ドキュメントへの参照、リターン状態、およびドキュメントとソリューションのバージョン番号を返します。

イベント オブジェクトの使用

イベント ハンドラを作成する際、InfoPath は、プロジェクトのフォーム コード ファイル (FormCode.cs または FormCode.vb) 内でイベント ハンドラの宣言を作成します。イベント ハンドラの宣言内で、InfoPath は、イベント ハンドラに渡されるパラメータの名前として e を使用します。このパラメータには、イベント ハンドラに関連付けられるイベント オブジェクトが含まれます。

たとえば、[ツール] メニューをクリックして [プログラミング] をポイントし、[Loading イベント] をクリックすることで、デザイン モードで OnLoad イベントのイベント ハンドラを作成する際、InfoPath は、DocReturnEvent オブジェクトを受け取るイベント ハンドラの宣言をフォーム コード ファイルに追加し、以下のイベント ハンドラ宣言にコードを追加するためのコード エディタを開きます。

// The following function handler is created by Microsoft Office 
// InfoPath. Do not modify the type or number of arguments.
[InfoPathEventHandler(EventType=InfoPathEventType.OnLoad)]
public void FormEvents_OnLoad(DocReturnEvent e)
{
   // Write your code here.

}
' The following function handler is created by Microsoft Office 
' InfoPath. Do not modify the type or number of arguments.
<InfoPathEventHandler(EventType:=InfoPathEventType.OnLoad)> _
Public Sub FormEvents_OnLoad(ByVal e As DocReturnEvent)
   ' Write your code here.

End Sub

イベント ハンドラのコードを書く際、e パラメータを通じて渡されるイベント オブジェクトによって実装されるプロパティとメソッドを使用できます。たとえば、以下の OnBeforeChange イベント ハンドラでは、DataDOMEvent イベント オブジェクトの NewValue プロパティを使用して、変更されたフィールドの値が確認されます。それが空白の場合は、DataDOMEvent イベント オブジェクトの ReturnMessage プロパティを使用して、ユーザーに対してダイアログ ボックスでエラーが表示され、ReturnStatus プロパティが false に設定されて、ユーザーが行った変更が受け入れられないことを示します。

[InfoPathEventHandler(MatchPath="/my:myFields/my:field1", 
    EventType=InfoPathEventType.OnBeforeChange)]
public void field1_OnBeforeChange(DataDOMEvent e)
{
   // Determine whether there is a new value.
   if ((string)e.NewValue == "")
   {
      // The value is blank, so display an error message and roll
      // back the changes.
      e.ReturnMessage = "You must supply a value for this field.";
      e.ReturnStatus = false;
      return;
   }
}
<InfoPathEventHandler(MatchPath:="/my:myFields/my:field1", _ EventType:=InfoPathEventType.OnBeforeChange)> _
Public Sub field1_OnBeforeChange(ByVal e As DataDOMEvent)

   ' Determine whether there is a new value.
   If (e.NewValue = "") Then
      ' The value is blank, so display an error message and roll back
      ' the changes.
      e.ReturnMessage = "You must supply a value for this field."
      e.ReturnStatus = False
      Return
   End If
End Sub
メモメモ :

InfoPath 2003 互換オブジェクト モデルのそれぞれの InfoPath イベント オブジェクトは、異なるプロパティとメソッドを実装します。特定のイベント オブジェクトに関する詳細については、先に示したイベント オブジェクトの表でそれぞれのオブジェクトをクリックして参照してください。