다음을 통해 공유


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 노드입니다. 예를 들어 보기에서 현재 선택 영역이 텍스트 상자 안에 있는 경우 컨텍스트 노드는 텍스트 상자가 바인딩되어 있는 노드입니다. 현재 선택 영역이 반복 구역인 경우 컨텍스트 노드는 해당 항목의 노드입니다. 두 개의 반복 구역을 선택하는 경우 컨텍스트 노드는 보기에 매핑된 두 항목 모두의 상위 XML 노드입니다.

ContextChanged 이벤트는 비동기적입니다. 컨텍스트 노드에서 변경되는 모든 내용에 대해 발생하는 것이 아니라 응용 프로그램에서 다른 이벤트의 처리가 중지된 후에 발생합니다.

원본으로 사용하는 XML 문서가 로드되거나 보기가 변경되면 LoadingViewSwitched 이벤트가 발생한 후 ContextChanged 이벤트가 발생합니다.

UndoRedo 개체의 ContextChangedEventArgs 속성이 true이면 명시적인 사용자 컨텍스트 변경에 의해서가 아닌 사용자의 실행 취소 또는 다시 실행 작업으로 인해 컨텍스트가 변경된 것입니다. 원본으로 사용하는 XML 문서를 수정하는 ContextChanged 이벤트 내에서 실행 취소 또는 다시 실행 작업에 대한 응답으로 작업을 수행할 경우 데이터를 이전 상태로 되돌리려는 사용자의 의도가 영향을 받을 수 있으므로 이러한 작업은 피해야 합니다.

서식 있는 텍스트 상자 컨트롤의 경우 XHTML 내용 내에서 변경되는 컨텍스트 즉, 컨트롤의 서식 있는 텍스트에서 변경되는 선택 영역에 대해서는 ContextChanged 이벤트가 발생하지 않습니다. GetContextNodes 메서드를 사용하여 서식 있는 텍스트 상자 컨트롤 내의 선택 영역을 결정할 수 있습니다.

이 형식 또는 멤버는 Microsoft InfoPath Filer에서 연 양식에서 실행되는 코드에서만 액세스할 수 있습니다.

다음 예제에서는 양식에 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

참고 항목

참조

FormEvents 클래스

FormEvents 멤버

Microsoft.Office.InfoPath 네임스페이스