Freigeben über


ContextNode.CreatePartiallyPopulatedSubNode-Methode

Erstellt ein untergeordnetes ContextNode-Objekt, das nur die folgenden Informationen enthält: Type, Id und Location.

Namespace:  Microsoft.Ink
Assembly:  Microsoft.Ink.Analysis (in Microsoft.Ink.Analysis.dll)

Syntax

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

Parameter

  • type
    Typ: System.Guid
    Der Typ des zu erstellenden ContextNode-Objekts. Verwenden Sie zur Angabe des zu erstellenden Typs eine der GUIDs, die in der ContextNodeType-Klasse definiert sind.
  • nodeId
    Typ: System.Guid
    Der Bezeichner für den neuen Knoten.

Rückgabewert

Typ: Microsoft.Ink.ContextNode
Ein neues ContextNode-Objekt, das nur Informationen überType, Id und Location enthält. Dieser neue Knoten ist dem ContextNode untergeordnet.

Hinweise

Diese Methode wird für ein Datenproxy verwendet, um ein ContextNode-Objekt in der Kontextknotenstruktur zu erstellen, bevor alle relevanten Informationen zur Verfügung stehen. Die anderen Informationen können später hinzugefügt werden.

Beispiele

Das folgende Beispiel zeigt eine Methode mit dem Namen CreatePartiallyPopulatedNode aus Beispielcode, der eine System.Windows.Forms.TreeView als Dokumentmodell verwendet, um zu zeigen, wie ein Datenproxy zum Speichern oder Laden der Kontextknotenstruktur für einen InkAnalyzer verwendet werden kann. Die DocumentNodeData-Klasse speichert die ContextNode-Daten im Dokumentmodell, indem sie die Tag-Eigenschaft jedes TreeNode-Objekts auf ein DocumentNodeData-Objekt festlegt. Die CreatePartiallyPopulatedNode-Methode verwendet ein TreeNode-Objekt und ein InkAnalyzer-Objekt, um die teilweise aufgefüllten Knoten in der InkAnalyzer-Kontextknotenstruktur zu erstellen, die mit dem TreeNode im Dokumentmodell übereinstimmen. In diesem Beispiel werden alle Knoten als teilweise aufgefüllt erstellt. Dann werden sie in eine Warteschlange von Knoten gestellt, um zu einem späteren Zeitpunkt komplett mit allen Knotendaten aufgefüllt zu werden.

Die Methode ruft zuerst die Knotendaten von der Tag-Eigenschaft des übergebenen TreeNode-Objekts ab. Anschließend verwendet die Methode die Id, um zu überprüfen, ob der Knoten derzeit nicht Teil der Kontextknotenstruktur ist. Danach verwendet sie den übergeordneten Knoten der Strukturansicht, um den entsprechenden übergeordneten Knoten im InkAnalyzer zu suchen. Wenn der übergeordnete Knoten noch nicht in der Kontextknotenstruktur vorhanden ist, wird er mithilfe der Rekursion hinzugefügt. Wenn der übergeordnete Knoten in der Struktur enthalten ist, sollte er teilweise aufgefüllt sein; wenn er vollständig aufgefüllt wäre, würde er bereits alle untergeordneten Knoten enthalten, und es wäre nicht erforderlich, einen neuen hinzuzufügen. Daher überprüft die PartiallyPopulated-Eigenschaft, ob der übergeordnete Knoten teilweise aufgefüllt ist. In diesem Fall wird er der Warteschlange hinzugefügt, um zu einem späteren Zeitpunkt vollständig aufgefüllt zu werden. Wenn er nicht teilweise aufgefüllt ist, wird eine Ausnahme ausgelöst. Schließlich wird CreatePartiallyPopulatedSubNode für den übergeordneten Knoten aufgerufen, und der neu erstellte Knoten wird der Warteschlange mit Knoten hinzugefügt, um vollständig aufgefüllt zu werden. Das neue ContextNode-Objekt wird zurückgegeben. Weitere Informationen zu Datenproxys finden Sie unter 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;
        }

Plattformen

Windows Vista

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Versionsinformationen

.NET Framework

Unterstützt in: 3.0

Siehe auch

Referenz

ContextNode-Klasse

ContextNode-Member

Microsoft.Ink-Namespace

ContextNode.PartiallyPopulated

Microsoft.Ink.ContextNodeType