フォーム イベントに応答するRespond to Form Events?

ユーザーがフォームに入力する際に発生する各種イベントに応答するコードを書くことができます。InfoPath 内でイベントの作業を実行するには、デザイン モードのフォーム テンプレートの作業中にイベント ハンドラーを追加します。You can write code to respond to various events that can occur as a user fills out a form. To work with events in InfoPath, you add event handlers while working with a form template in design mode.

InfoPath イベント ハンドラーは常にデザイン モードで作成する必要があります。これは、InfoPath ではイベントを InternalStartup メソッドにシンクするための正しい宣言が自動的に追加され、イベント ハンドラーのコード スケルトンがフォームのコード ファイル (FormCode.cs または FormCode.vb) に挿入されるためです。イベント ハンドラーを作成した後、フォームのコード ファイルの宣言は変更しないでください。InfoPath event handlers should always be created in design mode because InfoPath automatically adds the correct declaration for sinking the event to the InternalStartup method and inserts the event handler's code skeleton into a form's code file (FormCode.cs or FormCode.vb). After you have created an event handler, you should not alter its declaration in the form's code file.

InfoPath イベント ハンドラーの作成について詳しくは、「イベント ハンドラーを追加する方法」を参照してください。For information about creating the InfoPath event handlers, see How to: Add an Event Handler.

イベント クラスの概要Overview of the Event Classes

Microsoft.Office.InfoPath 名前空間によって提供される InfoPath モデルでは、12 個のイベントを実装する 3 つのクラスを実装します。イベントはフォーム テンプレート ビジネス ロジックにより発生させ、処理することができます。次の表に、各 InfoPath イベント オブジェクト、関連付けられたイベント、およびその機能を示します。The InfoPath model provided by the Microsoft.Office.InfoPath namespace implements three classes that implement the 12 events that can be raised and handled by form template business logic. The following table lists each of the InfoPath event objects, the events they are associated with, and a description of the functionality they provide.

名前Name イベントEvents 説明Description
ButtonEventButtonEvent
ClickedClicked
ButtonEvent クラスは、フォーム上の [ ボタン] コントロールがクリックされると発生する Clicked イベントを実装します。The ButtonEvent class implements the Clicked event that is raised when a Button control is clicked on a form.
FormEventsFormEvents
ContextChangedContextChanged
LoadingLoading
MergeMerge
SaveSave
SignSign
SubmitSubmit
VersionUpgradeVersionUpgrade
ViewSwitchedViewSwitched
FormEvents クラスは、InfoPath フォーム テンプレート自体に固有のイベントを実装します。The FormEvents class implements the events that are specific to an InfoPath form template itself:
ContextChangedContextChanged
コンテキスト ノードが変更されると発生します。Occurs after the context node changes.
LoadingLoading
フォーム テンプレートが読み込まれた後、ビューが初期化される前に発生します。Occurs when the form template has been loaded, but before any views have been initialized.
MergeMerge
[ フォームの結合] コマンドがユーザー インターフェイスから起動される、または /aggregate コマンド ライン スイッチを指定して InfoPath が開始されると発生します。Occurs when the Merge Forms command is invoked from the user interface, or InfoPath is started with the /aggregate command-line switch.
SaveSave
ユーザー インターフェイスから [ 保存] または [ 名前を付けて保存] コマンドが使用される、または XmlForm クラスの Save メソッドおよび SaveAs メソッドが使用されると発生します。Occurs when the Save or Save As commands are used from the user interface, or when the Save and SaveAs methods of the XmlForm class are used.
SignSign
[ デジタル署名] ダイアログ ボックスで署名することになる署名データが選択されると発生します。Occurs after a set of signed data has been selected to sign through the Digital Signatures dialog box.
SubmitSubmit
ユーザー インターフェイスから [ 送信] コマンドが使用される、または XmlForm クラスの Submit メソッドが使用されると発生します。Occurs when the Submit command is used from the user interface, or the Submit method of the XmlForm class is used.
VersionUpgradeVersionUpgrade
開かれているフォームのバージョン番号が、基になっているフォーム テンプレートのバージョン番号よりも古いと発生します。Occurs when the version number of the form being opened is older than the version number of the form template on which it is based.
ViewSwitchedViewSwitched
フォームのビューの切り替えが成功した後で発生します。Occurs after a view of a form has been successfully switched.
XmlEventXmlEvent
ChangedChanged
ChangingChanging
ValidatingValidating
フォーム インスタンスの基になっている XML ドキュメントのデータに対する変更によって発生するイベントを実装します。Implements the events raised by changes to the data in the underlying XML document of a form instance:
ChangedChanged
フォームの基になっている XML ドキュメントの変更が受け付けられ、 Validating イベントが発生した後、発生します。Occurs after changes to a form's underlying XML document have been accepted and after the Validating event has occurred.
ChangingChanging
フォームの基になっている XML ドキュメントに対する変更が行われた後で、変更が受け付けられる前に発生します。Occurs after changes to a form's underlying XML document have been made but before the changes have been accepted.
ValidatingValidating
フォームの基になっている XML ドキュメントの変更が受け付けられた後、 Changed イベントが発生する前に発生します。Occurs after changes to a form's underlying XML document have been accepted but before the Changed event has occurred.
XmlEvent クラスは、 RaiseUndoRedoForChanged プロパティも実装します。このプロパティは、元に戻す操作またはやり直し操作が実行されたときに Changed イベントが発生するかどうかを取得または設定します。 The XmlEvent class also implements the RaiseUndoRedoForChanged property, which gets or sets whether the Changed event will be raised when an undo or redo operation occurs.

注意

Changed イベントと Changing イベントは、フォームの空白ではないフィールドが変更されたときに 1 回だけ発生します。一方、 Microsoft.Office.Interop.InfoPath.SemiTrust 名前空間によって提供される InfoPath 2003 と InfoPath 2003 互換のオブジェクト モデルの類似したイベント ( OnBeforeChangeOnAfterChange ) は、フォームの空白ではないフィールドの変更時に 2 回発生します。つまり、古い値が削除されたときに 1 回、新しい値が挿入されたときにもう 1 回発生します。The Changed and Changing events fire only once when a change is made in a non-blank field in the form, whereas the comparable events in InfoPath 2003 and the InfoPath 2003-compatible object model provided by the Microsoft.Office.Interop.InfoPath.SemiTrust namespace ( OnBeforeChange and OnAfterChange ) fire twice on changes to a non-blank field: once when the old value is deleted, and again when the new value is inserted.

EventArgs クラスの概要Overview of the EventArgs Classes

12 個の各イベントには、イベント ハンドラーに渡される EventArgs オブジェクトが関連付けられています。このオブジェクトにより、イベント ハンドラー コードで使用できるイベントの状態情報およびその他の機能が提供されます。次の表に、InfoPath イベント、関連付けられた EventArgs オブジェクト、およびオブジェクトのプロパティとメソッドで提供される機能の簡単な説明を示します。オブジェクトの特定のプロパティとメソッドの詳細については、表の EventArgs オブジェクトの名前をクリックし、トピックの [メンバー] リンクをクリックしてください。Each of the 12 events have an EventArgs object associated with the event that are passed to the event handler for the event to provide state information and other functionality that can be used in the event handler code. The following table lists the InfoPath events with their associated EventArgs objects and a brief description of the functionality provided by the properties and methods of the object. For details on the specific properties and methods of the object, click the name of the EventArgs object in the table, and then click on the Members link in the topic.

イベントEvent EventsArgs クラスEventsArgs Class 説明Description
ClickedClicked
ClickedEventArgsClickedEventArgs
コントロール ID を取得します。Gets the control ID.
[ ボタン] コントロールを含む、フォームの基になる XML ドキュメントで、最も内側の XML ノードに置かれている XPathNavigator オブジェクトを取得します。Get an XPathNavigator object positioned at the innermost XML node of the form's underlying XML document that contains the Button control.
ContextChangedContextChanged
ContextChangedEventArgsContextChangedEventArgs
イベントが発生したときに実行されたコンテキスト変更の種類を取得します。Gets the type of context change that was performed when the event occurred.
操作を元に戻したかやり直したことによって、コンテキスト変更が発生したかどうかを示す値を取得します。Gets a value indicating whether the context change event occurred in response to undoing or redoing an operation.
イベントが発生したコンテキスト ノードに置かれていた XPathNavigator への参照を取得します。Gets a reference to an XPathNavigator positioned at the context node that raised the event.
LoadingLoading
LoadingEventArgsLoadingEventArgs
読み込み後にフォームを開くビューを指定します。Specifies the view in which to open the form after loading.
XmlFormCancelEventArgs オブジェクトへの参照を取得します。Gets a reference to the XmlFormCancelEventArgs object.
**** コマンド ライン オプションを使用して、またはフォームを開く URL のクエリ パラメーターを使用して指定された入力パラメーターを含む /InputParameters を取得します。Gets an IDictionary containing any input parameters specified using the /InputParameters command-line option, or specified using query parameters in a URL to open the form.
MergeMerge
MergeEventArgsMergeEventArgs
XmlFormCancelEventArgs オブジェクトへの参照を取得します。Gets a reference to the XmlFormCancelEventArgs object.
結合操作で結合されるフォームの数を取得します。Gets the count of the number of forms being merged in a merging operation.
現在結合されているフォームの、ゼロベースのインデックスを取得します。Gets the zero-based index of the form that is currently being merged.
現在のフォームのみを取り消すのか、または結合操作全体を取り消すのかを判別するために、 Cancel プロパティと共に使用する値を取得または設定します。Gets or sets a value that is used with the Cancel property to determine whether to cancel only the current form or the entire merging operation.
現在結合されているフォームの基になっている XML ドキュメントのルート ノードに配置されている XPathNavigator オブジェクトを取得します。Gets an XPathNavigator object positioned at the root node of the underlying XML document of the form that is currently being merged.
SaveSave
SaveEventArgsSaveEventArgs
ユーザーによって要求された保存操作を実行します。Performs the save operation requested by the user.
イベントの取り消しに使用できる SaveCancelEventArgs オブジェクトへの参照を取得します。Gets a reference to the SaveCancelEventArgs object that can be used to cancel the event.
イベントに対するイベント ハンドラーで使用するファイル名を取得します。Gets the file name to be used in the event handler for the event.
保存操作が "保存" 操作として実行されるか "名前を付けて保存" として実行されるかを取得します。Gets whether the save operation will be performed as a "save" operation or as a "save as" operation.
SignSign
SignEventArgsSignEventArgs
[ デジタル署名] ダイアログ ボックスを表示するかどうかを取得または設定します。Gets or sets whether to display the Digital Signatures dialog box.
イベントを発生させた署名可能なデータのセットを取得します。Gets the set of signable data that raised the event.
SubmitSubmit
SubmitEventArgsSubmitEventArgs
イベントを取り消す XmlFormCancelEventArgs オブジェクトへの参照を取得します。Gets a reference to the XmlFormCancelEventArgs object for cancelling the event.
VersionUpgradeVersionUpgrade
VersionUpgradeEventArgsVersionUpgradeEventArgs
イベントを取り消す XmlFormCancelEventArgs オブジェクトへの参照を取得します。Gets a reference to the XmlFormCancelEventArgs object for cancelling the event.
アップグレード中のフォーム ドキュメントのバージョン番号を取得します。Gets the version number of the form document being upgraded.
アップグレード中のフォームに関連付けられたフォーム テンプレートのバージョン番号を取得します。Gets the version number of the form template associated with the form being upgraded.
ViewSwitchedViewSwitched
ViewSwitchedEventArgsViewSwitchedEventArgs
ViewSwitchedEventArgs クラスには、イベントに対して System.Object から継承される以外のプロパティとメソッドはありません。The ViewSwitchedEventArgs class does not provide any properties and methods for the event other than those inherited from System.Object.
ChangedChanged
XmlEventArgsXmlEventArgs
現在変更中のノードを返す XPath 式を含む XPathExpression オブジェクトを取得します。Gets an XPathExpression object which contains an XPath expression that returns the node that is currently being changed.
変更中のノードの新しい値を取得します。Gets the new value for the node being changed.
削除中のノードの親であるノードを示す XPathNavigator オブジェクトを取得します。Gets an XPathNavigator object pointing to the node which is the parent of the node being deleted.
変更中のノードの元の値を取得します。Gets the original value of the node that is being changed.
ノードが変更されたときに発生した操作の種類を示す XmlOperation 列挙を取得します。Gets an XmlOperation enumeration that indicates the type of operation that occurred when the node was changed.
変更中のノードを示す XPathNavigator オブジェクトを取得します。Gets an XPathNavigator object pointing at the node that is being changed.
変更中のノードが、元に戻すまたはやり直す操作の一部であるかどうかを示す値を取得します。Gets a value that indicates whether the node being changed is part of an undo or redo operation.
ChangingChanging
XmlChangingEventArgsXmlChangingEventArgs
イベントに関連付けられた XmlFormCancelEventArgs オブジェクトを取得します。Gets an XmlFormCancelEventArgs object associated with the event.
上記の XmlEventArgs オブジェクトの機能をすべて継承します。Inherits all of the functionality listed above for the XmlEventArgs object.
ValidatingValidating
XmlValidatingEventArgsXmlValidatingEventArgs
指定した値を持つカスタム エラー情報の入った FormError オブジェクトを作成し、それをフォームの FormErrorCollection オブジェクトに追加します。Creates a FormError object that contains custom error information with the specified values and adds it to the FormErrorCollection object of the form.
上記の XmlEventArgs オブジェクトの機能をすべて継承します。Inherits all of the functionality listed above for the XmlEventArgs object.

EventArgs オブジェクトを使用するUsing the EventArgs Objects

イベント ハンドラーを作成する際、InfoPath は、プロジェクトのフォーム コード ファイル内でイベント ハンドラーの宣言を作成します。イベント ハンドラーの宣言内で、InfoPath は、イベント ハンドラーに渡されるパラメーターの名前として e を使用します。このパラメーターには、イベント発生時に状態情報とその他の機能を提供するイベント ハンドラーに関連付けられる EventArgs オブジェクトが含まれます。When you create an event handler, InfoPath creates the event handler's declaration in the project's form code. In the declaration of the event handler, InfoPath uses e as the name of the parameter that is passed to the event handler. This parameter contains the EventArgs object that is associated with the event handler for providing state information and other functionality when the event occurs.

たとえば、[ 開発] タブの [ Loading イベント] をクリックすることで、デザイン モードで Loading イベントのイベント ハンドラーを作成する際、InfoPath は、 LoadingEventArgs オブジェクトを受け取るイベント ハンドラーの宣言をフォーム コード ファイルに追加し、次のイベント ハンドラー宣言にコードを追加するためのコード エディターを開きます。For example, when you create an event handler for the Loading event in design mode (by clicking Loading Event menu on the Developer tab), InfoPath adds the declaration for the event handler that receives the LoadingEventArgs object to the form code file, and then opens the code editor so that you can add your code to the following event handler declaration.

public void FormEvents_Loading(object sender, LoadingEventArgs e)
{
   // Write your code here.
}
Public Sub FormEvents_Loading(ByVal sender As Object, _
   ByVal e As LoadingEventArgs)
   ' Write your code here.
End Sub

イベント ハンドラーのコードを書く際、 e パラメーターを通じて渡される EventArgs イベント オブジェクトによって実装されるプロパティとメソッドを使用できます。 たとえば、次の Changing イベント ハンドラーでは、 XmlChangingEventArgs オブジェクトの NewValue プロパティ ( XmlEventArgs クラスから継承) を使用して、変更されたフィールドの値が確認されます。ユーザーがフィールドを変更し、空白にした場合、 XmlChangingEventArgs オブジェクトの CancelableArgs プロパティを使用して、 XmlFormCancelEventArgs クラスの Message プロパティにアクセスし、ユーザーにエラーを表示し、 XmlFormCancelEventArgs.Cancel プロパティを true に設定してイベントを取り消し、ユーザーが行った変更内容をロールバックします。When writing code for an event handler, you can use the properties and methods implemented by the EventArgs object that is passed through the e parameter. For example, in the following Changing event handler, the NewValue property of the XmlChangingEventArgs object (which is inherited from the XmlEventArgs class) is used to check the value of the field that was just changed. If the user changed the field and left it blank, the Message property of the XmlFormCancelEventArgs class is accessed using the CancelableArgs property of the XmlChangingEventArgs object to display an error to the user, and the XmlFormCancelEventArgs.Cancel property is set to true, to cancel the event and roll back the changes the user made.

public void field1_Changing(object sender, LoadingEventArgs e)
{
   // Determine whether there is a new value.
   if (e.NewValue == "")
   {
      // The value is blank, so display an error message
      // and roll back the changes.
      e.CancelableArgs.Message = 
         "You must supply a value for this field.";
      e.CancelableArgs.Cancel = true;
      return;
   }
}
Public Sub field1_Changing(ByVal sender As Object, _
   ByVal e As LoadingEventArgs)
   ' 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.CancelableArgs.Message = _
         "You must supply a value for this field."
      e.CancelableArgs.Cancel = True
      Return
   End If
End Sub