FormEvents.ContextChanged イベント
コンテキスト ノードが変更されると発生します。
名前空間: Microsoft.Office.InfoPath
アセンブリ: Microsoft.Office.InfoPath (Microsoft.Office.InfoPath.dll)
構文
'宣言
Public MustOverride Event ContextChanged As ContextChangedEventHandler
'使用
Dim instance As FormEvents
Dim handler As ContextChangedEventHandler
AddHandler instance.ContextChanged, handler
public abstract event ContextChangedEventHandler ContextChanged
例外
例外 | 条件 |
---|---|
InvalidOperationException | 開発者は、InternalStartup メソッドとは異なる場所でイベントをバインドしようとしました。 |
解説
重要
ContextChanged イベント自体は、フォーム コードで開発者がインスタンス化するためのものではありません。開発者は、Microsoft InfoPath 2010 デザイン モード ユーザー インターフェイスからフォーム レベル イベントに対するイベント ハンドラーの追加だけを行います。デザイン モード ユーザー インターフェイスからフォーム テンプレートにイベント ハンドラーを追加すると、InfoPath は、EventManager クラスおよび FormEvents クラスのメンバーを使用してフォーム コード ファイルの InternalStartup メソッドにコードを生成し、イベントをイベント ハンドラーにバインドします。InfoPath のデザイン モードでイベント ハンドラーを追加する方法の詳細については、「[方法] イベント ハンドラーを追加する方法」を参照してください。
ContextChanged イベントは、ContextChangedEventHandler デリゲートを使用してバインドされます。
コンテキスト ノードは、現在選択されている XML でコンテナー (またはアイテム) に対応するビューにマップされる XML ノードです。たとえば、ビューで現在テキスト ボックスが選択されている場合は、そのテキスト ボックスがバインドされているノードになります。繰り返しセクションが現在選択されている場合は、コンテキスト ノードはそのアイテムに対するノードです。2 つの繰り返しセクションが選択されている場合は、コンテキスト ノードは、ビューにマップされる、両方のアイテムに対する祖先の XML ノードです。
ContextChanged イベントは非同期です。コンテキスト ノードが変化するたびに発生するのではなく、アプリケーションが他のイベントの処理を終了した後で発生します。
基になっている XML ドキュメントが読み込まれると、またはビューの変更が発生すると、Loading イベントと ViewSwitched イベントが発生した後で、ContextChanged イベントが発生します。
ContextChangedEventArgs オブジェクトの UndoRedo プロパティが true のときは、コンテキストの変更は、ユーザー コンテキストの明示的な変更ではなく、ユーザーの元に戻す操作またはやり直し操作によって発生したものです。ContextChanged イベントの中で基になっている XML ドキュメントを変更する動作は、元に戻す操作またはやり直し操作に対する応答では行わないようにする必要があります。データを前の状態に戻そうとするユーザーの意図を妨げる場合があります。
[リッチ テキスト ボックス] コントロールの場合は、XHTML コンテンツ内でのコンテキストの変更、つまりコントロール内でのリッチ テキストの選択変更に対しては、ContextChanged イベントは発生しません。[リッチ テキスト ボックス] コントロール内での選択は、GetContextNodes メソッドを使用して判別できます。
この型またはメンバーには、Microsoft InfoPath Filler で開かれたフォームを実行中のコードからのみアクセスできます。
例
次の例では、フォームには、DisplayContext という名前のフィールドにバインドされた [テキスト ボックス] コントロール、およびフォーム上の他のフィールドやグループにバインドされたコントロールがあるものとします。選択を他のフィールドおよびグループに移動すると、そのフィールドまたはグループの名前が、DisplayContext にバインドされた [テキスト ボックス] に表示されます。
public void FormEvents_ContextChanged(object sender,
ContextChangedEventArgs e)
{
if (e.ChangeType == "ContextNode")
{
// Position a XPathNavigator on the DisplayContext field.
XPathNavigator root, txtbox;
root = this.MainDataSource.CreateNavigator();
txtbox = root.SelectSingleNode("/my:myFields/my:DisplayContext",
this.NamespaceManager);
// Set DisplayContext with the name of the current context.
txtbox.SetValue(e.Context.Name);
return;
}
}
Public Sub FormEvents_ContextChanged(ByVal sender As Object, _
ByVal e As ContextChangedEventArgs)
If (e.ChangeType = "ContextNode") Then
' Position a XPathNavigator on the DisplayContext field.
Dim root, txtbox As XPathNavigator
root = Me.MainDataSource.CreateNavigator
txtbox = root.SelectSingleNode("/my:myFields/my:DisplayContext",
Me.NamespaceManager)
' Set DisplayContext with the name of the current context.
txtbox.SetValue(e.Context.Name)
Return
End If
End Sub