Compartir a través de


ContextNode.CreatePartiallyPopulatedSubNode (Método)

Actualización: noviembre 2007

Crea un objeto ContextNode secundario que sólo contiene la información siguiente: Type, Id y Location.

Espacio de nombres:  Microsoft.Ink
Ensamblado:  Microsoft.Ink.Analysis (en Microsoft.Ink.Analysis.dll)

Sintaxis

'Declaración
Public Function CreatePartiallyPopulatedSubNode ( _
    type As Guid, _
    nodeId As Guid, _
    nodeLocation As AnalysisRegion _
) As ContextNode
'Uso
Dim instance As ContextNode
Dim type As Guid
Dim nodeId As Guid
Dim nodeLocation As AnalysisRegion
Dim returnValue As ContextNode

returnValue = instance.CreatePartiallyPopulatedSubNode(type, _
    nodeId, nodeLocation)
public ContextNode CreatePartiallyPopulatedSubNode(
    Guid type,
    Guid nodeId,
    AnalysisRegion nodeLocation
)
public:
ContextNode^ CreatePartiallyPopulatedSubNode(
    Guid type, 
    Guid nodeId, 
    AnalysisRegion^ nodeLocation
)
public ContextNode CreatePartiallyPopulatedSubNode(
    Guid type,
    Guid nodeId,
    AnalysisRegion nodeLocation
)
public function CreatePartiallyPopulatedSubNode(
    type : Guid, 
    nodeId : Guid, 
    nodeLocation : AnalysisRegion
) : ContextNode

Parámetros

  • nodeId
    Tipo: System.Guid
    Identificador del nuevo nodo.

Valor devuelto

Tipo: Microsoft.Ink.ContextNode
Nuevo objeto ContextNode que sólo contiene información sobre Type, Idy Location. Este nuevo nodo es un elemento secundario de ContextNode.

Comentarios

Este método se utiliza para el proxy de datos como un modo de crear un objeto ContextNode en el árbol de nodos de contexto antes de que toda la información sobre él esté disponible. La demás información sobre él se puede agregar posteriormente.

Ejemplos

El ejemplo siguiente es un método denominado CreatePartiallyPopulatedNode, perteneciente a código de ejemplo que utiliza System.Windows.Forms.TreeView como un modelo de documento para mostrar cómo se puede utilizar el proxy de datos para almacenar y cargar un árbol de nodos de contexto de un objeto InkAnalyzer. La clase DocumentNodeData almacena los datos del objeto ContextNode en el modelo de documento estableciendo la propiedad Tag de cada objeto TreeNode en un objeto DocumentNodeData. El método CreatePartiallyPopulatedNode utiliza un objeto TreeNode y un objeto InkAnalyzer para crear el nodo relleno parcialmente en el árbol de nodos de contexto InkAnalyzer que corresponde al objeto TreeNode del modelo de documento. En este ejemplo, todos los nodos se crean rellenos parcialmente. A continuación, se colocan en una cola de nodos para rellenarlos totalmente más tarde con todos los datos del nodo.

El método primero obtiene los datos del nodo de la propiedad Tag del objeto TreeNode que se pasa. A continuación, utiliza la propiedad Id para comprobar que el nodo no está actualmente en el árbol de nodos de contexto. A continuación, utiliza el nodo primario de la vista de árbol para buscar el nodo primario correspondiente en el objeto InkAnalyzer. Si el nodo primario no existe todavía en el árbol de nodos de contexto, se agrega mediante recursividad. Si el nodo primario existe en el árbol, se debería rellenar parcialmente; si estuviera relleno totalmente, ya contendría todos sus subnodos y no habría necesidad de agregar uno nuevo. Por consiguiente, la propiedad PartiallyPopulated comprueba que el nodo primario está relleno parcialmente, en cuyo caso se agrega a una cola para rellenarlo totalmente más tarde. Si no está relleno parcialmente, se produce una excepción. Finalmente, se llama al método CreatePartiallyPopulatedSubNode en el nodo primario y el nodo recién creado se agrega a la cola de nodos que se van a rellenar totalmente. Se devuelve el nuevo objeto ContextNode. Para obtener más información sobre el proxy de datos, vea Data Proxy with Ink Analysis.

Private Function CreatePartiallyPopulatedNode(ByVal documentNode As TreeNode, _
    ByVal theInkAnalyzer As Microsoft.Ink.InkAnalyzer) As Microsoft.Ink.ContextNode

    Dim nodeData As DocumentNodeData = documentNode.Tag '

    ' Check that the node does not already exist in the InkAnalyzer.
    If Nothing <> theInkAnalyzer.FindNode(nodeData.Id) Then
        Throw New ApplicationException("The node already exists in the InkAnalyzer.")
    End If

    ' Find the parent analyzer node.
    Dim parentNodeData As DocumentNodeData = documentNode.Parent.Tag

    Dim analyzerParentNode As Microsoft.Ink.ContextNode = _
        theInkAnalyzer.FindNode(parentNodeData.Id)

    If Nothing = analyzerParentNode Then
        ' The parent analyzer node does not exist yet. Create one.
        analyzerParentNode = Me.CreatePartiallyPopulatedNode(documentNode.Parent, theInkAnalyzer)
    ElseIf analyzerParentNode.PartiallyPopulated Then
        ' The parent analyzer node exists and is partially populated. Add it
        ' to the stack of nodes to fully populate.
        Me.QueueNodeToPopulate(analyzerParentNode)
    Else
        ' The parent analyzer node exists and is fully populated. This
        ' should not happen.
        Throw New ApplicationException("The parent analyzer node is fully populated.")
    End If

    ' Create the partially populated node under its parent analyzer node.
    Dim analyzerNode As Microsoft.Ink.ContextNode = _
        analyzerParentNode.CreatePartiallyPopulatedSubNode(nodeData.Type, _
        nodeData.Id, nodeData.Location)

    ' Add the new node to the stack of nodes to fully populate.
    Me.QueueNodeToPopulate(analyzerNode)

    Return analyzerNode

End Function 'CreatePartiallyPopulatedNode
        private Microsoft.Ink.ContextNode CreatePartiallyPopulatedNode(
            TreeNode documentNode, Microsoft.Ink.InkAnalyzer theInkAnalyzer)
        {
            DocumentNodeData nodeData = documentNode.Tag as DocumentNodeData;

            // Check that the node does not already exist in the InkAnalyzer.
            if (null != theInkAnalyzer.FindNode(nodeData.Id))
            {
                throw new ApplicationException(
                    "The node already exists in the InkAnalyzer.");
            }

            // Find the parent analyzer node.
            DocumentNodeData parentNodeData =
                documentNode.Parent.Tag as DocumentNodeData;
            Microsoft.Ink.ContextNode analyzerParentNode =
                theInkAnalyzer.FindNode(parentNodeData.Id);
            if (null == analyzerParentNode)
            {
                // The parent analyzer node does not exist yet. Create one.
                analyzerParentNode =
                    this.CreatePartiallyPopulatedNode(
                        documentNode.Parent, theInkAnalyzer);
            }
            else if (analyzerParentNode.PartiallyPopulated)
            {
                // The parent analyzer node exists and is partially populated. Add it
                // to the stack of nodes to fully populate.
                this.QueueNodeToPopulate(analyzerParentNode);
            }
            else
            {
                // The parent analyzer node exists and is fully populated. This
                // should not happen.
                throw new ApplicationException(
                    "The parent analyzer node is fully populated.");
            }

            // Create the partially populated node under its parent analyzer node.
            Microsoft.Ink.ContextNode analyzerNode =
                analyzerParentNode.CreatePartiallyPopulatedSubNode(
                    nodeData.Type, nodeData.Id, nodeData.Location);

            // Add the new node to the stack of nodes to fully populate.
            this.QueueNodeToPopulate(analyzerNode);

            return analyzerNode;
        }

Plataformas

Windows Vista

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Información de versión

.NET Framework

Compatible con: 3.0

Vea también

Referencia

ContextNode (Clase)

ContextNode (Miembros)

Microsoft.Ink (Espacio de nombres)

ContextNode.PartiallyPopulated

Microsoft.Ink.ContextNodeType