Condividi tramite


Metodo ContextNode.CreatePartiallyPopulatedSubNode

Aggiornamento: novembre 2007

Crea un oggetto Id figlio che contiene solo le informazioni seguenti: Location, ContextNode e Type.

Spazio dei nomi:  Microsoft.Ink
Assembly:  Microsoft.Ink.Analysis (in Microsoft.Ink.Analysis.dll)

Sintassi

'Dichiarazione
Public Function CreatePartiallyPopulatedSubNode ( _
    type As Guid, _
    nodeId As Guid, _
    nodeLocation As AnalysisRegion _
) As ContextNode
'Utilizzo
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

Parametri

  • nodeId
    Tipo: System.Guid
    Identificatore del nuovo nodo.

Valore restituito

Tipo: Microsoft.Ink.ContextNode
Nuovo oggetto ContextNode contenente solo le informazioni relative a Type, Id e Location. Questo nuovo nodo è figlio di ContextNode.

Note

Questo metodo viene utilizzato per il proxy di dati e consente di creare un oggetto ContextNode nella struttura ad albero del nodo di contesto prima che siano disponibili tutte le informazioni a riguardo. Le altre informazioni possono essere aggiunte in un momento successivo.

Esempi

Nell'esempio seguente viene utilizzato un metodo chiamato CreatePartiallyPopulatedNode, dal codice di esempio che utilizza un System.Windows.Forms.TreeView come modello documento per mostrare come il proxy di dati può essere utilizzato per archiviare e caricare una struttura ad albero del nodo di contesto per un InkAnalyzer. La classe DocumentNodeData archivia i dati ContextNode nel modello documento impostando la proprietà Tag di ciascun oggetto TreeNode su un oggetto DocumentNodeData. Il metodo CreatePartiallyPopulatedNode utilizza un oggetto TreeNode e un oggetto InkAnalyzer per creare il nodo compilato parzialmente nella struttura ad albero del nodo di contesto InkAnalyzer che corrisponde all'oggetto TreeNode nel modello documento. In questo esempio, tutti i nodi vengono creati come parzialmente compilati. Quindi, vengono posizionati in una coda di nodi da compilare completamente con tutti i dati del nodo in un momento successivo.

Il metodo ottiene prima i dati del nodo dalla proprietà Tag dell'oggetto TreeNode passato. Successivamente utilizza l'oggetto Id per verificare che il nodo non si trova attualmente nella struttura ad albero del nodo di contesto. Quindi utilizza il nodo padre della visualizzazione struttura per trovare il nodo padre corrispondente in InkAnalyzer. Se il nodo padre ancora non è presente nella struttura ad albero del nodo di contesto, viene aggiunto tramite la ricorsione. Se invece è presente nella struttura ad albero, il nodo padre deve essere compilato parzialmente. Se fosse compilato completamente, conterrebbe già tutti i sottonodi e non sarebbe necessario aggiungerne uno nuovo. Pertanto, la proprietà PartiallyPopulated verifica che il nodo padre sia compilato parzialmente e, in tal caso, questo viene aggiunto a una coda per essere compilato completamente in un momento successivo. Se il nodo non è compilato parzialmente, viene generata un'eccezione. Infine, viene chiamato il metodo CreatePartiallyPopulatedSubNode nel nodo padre e il nodo appena creato viene aggiunto alla coda dei nodi da compilare completamente. Il nuovo oggetto ContextNode viene restituito. Per ulteriori informazioni sul proxy di dati, vedere 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;
        }

Piattaforme

Windows Vista

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Informazioni sulla versione

.NET Framework

Supportato in: 3.0

Vedere anche

Riferimenti

ContextNode Classe

Membri ContextNode

Spazio dei nomi Microsoft.Ink

ContextNode.PartiallyPopulated

Microsoft.Ink.ContextNodeType