次の方法で共有


FormEvents.ContextChanged イベント

定義

コンテキスト ノードが変更されると発生します。

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

イベントの種類

例外

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

次の例では、フォームには、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

注釈

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

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

コンテキスト ノードは、現在選択されている XML でコンテナー (またはアイテム) に対応するビューにマップされる XML ノードです。 たとえば、ビューで現在テキスト ボックスが選択されている場合は、そのテキスト ボックスがバインドされているノードになります。 繰り返しセクションが現在選択されている場合は、コンテキスト ノードはそのアイテムに対するノードです。 2 つの繰り返しセクションが選択されている場合は、コンテキスト ノードは、ビューにマップされる、両方のアイテムに対する祖先の XML ノードです。

ContextChanged イベントは非同期です。 コンテキスト ノードが変化するたびに発生するのではなく、アプリケーションが他のイベントの処理を終了した後で発生します。

基になる XML ドキュメントが読み込まれるとき、またはビューの変更が発生すると、 イベントと ViewSwitched イベントが発生した後Loadingに ContextChanged イベントが発生します。

オブジェクトのUndoRedoContextChangedEventArgsプロパティが true の場合、コンテキストの変更は、明示的なユーザー コンテキストの変更ではなく、ユーザーの元に戻す操作またはやり直し操作によって発生しました。 基になる XML ドキュメントを変更する ContextChanged イベント内で実行される操作は、元に戻す操作またはやり直し操作に応答して回避する必要があります。これは、ユーザーがデータを以前の状態に戻す意図を妨げる可能性があるためです。

[リッチ テキスト ボックス] コントロールの場合は、XHTML コンテンツ内でのコンテキストの変更、つまりコントロール内でのリッチ テキストの選択変更に対しては、ContextChanged イベントは発生しません。 メソッドを GetContextNodes() 使用して、リッチ テキスト ボックス コントロール内の選択を決定できます。

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

適用対象