Compartir a través de


Evento FormEvents.ContextChanged

Se produce después de que cambie el nodo de contexto.

Espacio de nombres:  Microsoft.Office.InfoPath
Ensamblado:  Microsoft.Office.InfoPath (en Microsoft.Office.InfoPath.dll)

Sintaxis

'Declaración
Public MustOverride Event ContextChanged As ContextChangedEventHandler
'Uso
Dim instance As FormEvents
Dim handler As ContextChangedEventHandler

AddHandler instance.ContextChanged, handler
public abstract event ContextChangedEventHandler ContextChanged

Excepciones

Excepción Condición
InvalidOperationException

El programador intentó enlazar el evento en una ubicación que no es el método InternalStartup.

Comentarios

Importante

El programador no debe crear instancias del evento ContextChanged en el código de formulario. Sólo debe agregar controladores de eventos para eventos del documento desde la interfaz de usuario del modo de diseño de Microsoft InfoPath. Al agregar un controlador de eventos a la plantilla de formulario desde la interfaz de usuario de modo de diseño, InfoPath genera código en el método InternalStartup del archivo de código de formulario mediante la clase EventManager y el miembro de la clase FormEvents para enlazar el evento a su controlador de eventos. Para obtener información sobre cómo agregar controladores de eventos en el modo de diseño de InfoPath, vea Cómo agregar un controlador de eventos.

El evento ContextChanged se enlaza utilizando el delegado ContextChangedEventHandler.

El nodo de contexto es el nodo XML asignado a la vista que corresponde al contenedor (o elemento) con la selección XML actual. Por ejemplo, si la selección actual en la vista se encuentra en un cuadro de texto, el nodo de contexto será el nodo al que esté enlazado el cuadro de texto. Si la selección actual es una sección extensible, el nodo de contexto será el nodo de ese elemento. Si se seleccionan dos secciones extensibles, el nodo de contexto será el nodo XML primario de ambos elementos asignado a esa vista.

El evento ContextChanged es asincrónico. No se activa con cada cambio del nodo de contexto, sino que se inicia una vez que la aplicación ha terminado de procesar otros eventos.

Cuando se carga el documento XML subyacente o cuando se produce un cambio de vista, el evento ContextChanged se inicia una vez producidos los eventos Loading y ViewSwitched.

Cuando la propiedad UndoRedo del objeto ContextChangedEventArgs es true, el cambio de contexto lo produce una operación deshacer o rehacer del usuario, no un cambio explícito de contexto realizado por éste. Deberían evitarse las operaciones realizadas en el evento ContextChanged que modifica el documento XML subyacente en respuesta a operaciones deshacer o rehacer, ya que pueden interferir con las intenciones del usuario de revertir datos a su estado anterior.

En el caso de controles de Cuadro de texto enriquecido, el evento ContextChanged no se inicia en los cambios de contexto dentro del contenido XHTML, es decir, en los cambios de selección del texto enriquecido del control. Para determinar la selección en los controles de Cuadro de texto enriquecido se puede usar el método GetContextNodes.

Únicamente se puede acceder a este tipo o miembro desde el código que se ejecuta en los formularios abiertos en Microsoft InfoPath Filler.

Ejemplos

En el siguiente ejemplo se supone que el formulario tiene un control de Cuadro de texto enlazado a un campo llamado DisplayContext, además de controles enlazados a otros campos y grupos del formulario. Si se mueve la selección a otros campos y grupos se muestra el nombre del campo o grupo en el control Cuadro de texto enlazado a 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

Vea también

Referencia

clase FormEvents

Miembros FormEvents

Espacio de nombres Microsoft.Office.InfoPath