Freigeben über


ContextNodeBase-Klasse

Stellt einen Knoten in einer Struktur von Objekten dar, die als Teil der Freihandanalyse erstellt werden.

Namespace:  System.Windows.Ink.AnalysisCore
Assembly:  IACore (in IACore.dll)

Syntax

'Declaration
Public Class ContextNodeBase
'Usage
Dim instance As ContextNodeBase
public class ContextNodeBase
public ref class ContextNodeBase
public class ContextNodeBase
public class ContextNodeBase

Beispiele

Dieses Beispiel erfasst einen InkAnalyzerBase mit dem Namen theInkAnalyzer und verwendet seine ContextNodeBase-Struktur, um eine System.Windows.Forms.TreeView mit dem Namen theTreeView aufzufüllen. Wenn ein Knoten in der Strukturansicht ausgewählt ist, werden die Striche rot dargestellt. Die Tag-Eigenschaft wird zur Zuordnung zwischen Strukturknoten und den Kontextknoten verwendet, die sie vertreten.

Private Sub BuildTree()
    Me.theTreeView.Nodes.Clear()
    Dim rootNode As New TreeNode(Me.theInkAnalyzerBase.RootNode.ToString())
    Me.theTreeView.Nodes.Add(rootNode)
    rootNode.Tag = Me.theInkAnalyzerBase.RootNode

    WalkTree(Me.theInkAnalyzerBase.RootNode, rootNode)

End Sub 'BuildTree


Private Sub WalkTree(ByVal parentContextNode As ContextNodeBase, ByVal parentTreeNode As TreeNode)

    Dim cNode As ContextNodeBase

    For Each cNode In parentContextNode.SubNodes

        Dim newTNode As New TreeNode(cNode.ToString())

        If cNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.InkWord AndAlso _
           cNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.RecognizedString) Then

            newTNode.Text = newTNode.Text + _
                ": " + CType(cNode.GetPropertyData(PropertyGuidsForContextNodesBase.RecognizedString), _
                String)

        ElseIf cNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.InkDrawing AndAlso _
               cNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.ShapeName) Then

            Dim shapeName As String = CType(cNode.GetPropertyData(PropertyGuidsForContextNodesBase.ShapeName), _
                String)

            If shapeName <> "" Then
                newTNode.Text = newTNode.Text + ": " + shapeName
            End If

        End If

        WalkTree(cNode, newTNode)
        parentTreeNode.Nodes.Add(newTNode)

        ' Add the context node as a tag of the tree node
        newTNode.Tag = cNode
    Next cNode

End Sub 'WalkTree

Private Sub theTreeView_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles theTreeView.AfterSelect
    ' Get the context node
    Dim selectedNode As ContextNodeBase = CType(e.Node.Tag, ContextNodeBase)

    MarkNodeAsRed(selectedNode)

    timeStampLabel.Text = ""

    ' Show selected results
    If Not (selectedNode Is Nothing) Then

        If (selectedNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.RecognizedString) AndAlso _
           (selectedNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.WritingRegion OrElse _
            selectedNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.Paragraph OrElse _
            selectedNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.CustomRecognizer OrElse _
            selectedNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.Object OrElse _
            selectedNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.Line)) Then

            selectedResultsTextBox.Text = _
                CType(selectedNode.GetPropertyData(PropertyGuidsForContextNodesBase.RecognizedString), String)

        ElseIf (selectedNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.InkWord) Then
            Dim parentNode As ContextNodeBase = selectedNode.ParentNode
            If (parentNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.Line AndAlso _
                    parentNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.RecognizedString)) Then

                ' Put parent line's recognized string into the text box
                selectedResultsTextBox.Text = _
                    CType(parentNode.GetPropertyData(PropertyGuidsForContextNodesBase.RecognizedString), String)

                ' Select the text that corresponds to the ink word
                Dim subNodes As New ContextNodeBaseCollection(theInkAnalyzerBase)
                subNodes.Add(selectedNode)
                Dim start As Integer
                Dim length As Integer
                theInkAnalyzerBase.GetTextRangeFromNodes(subNodes, start, length)
                If (start >= 0 AndAlso length > 0) Then
                    selectedResultsTextBox.Select(start, length)
                End If
            End If
        ElseIf (selectedNode.Type = System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.InkDrawing AndAlso _
                selectedNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.ShapeName)) Then

            selectedResultsTextBox.Text = _
                CType(selectedNode.GetPropertyData(PropertyGuidsForContextNodesBase.ShapeName), String)

        End If
    End If

    Me.currentNode = selectedNode

End Sub 'theTreeView_AfterSelect


Private Sub MarkNodeAsRed(ByVal selectedNode As ContextNodeBase)
    Dim selectedNodeStrokes As Strokes = Nothing

    If Not selectedNode Is Nothing Then
        selectedNodeStrokes = theInk.CreateStrokes(selectedNode.GetStrokeIds())
    End If

    ' Set all node strokes to black, but this one to red
    Dim stroke As Stroke
    For Each stroke In Me.theInkCollector.Ink.Strokes
        If (Not selectedNodeStrokes Is Nothing And _
                selectedNodeStrokes.Contains(stroke)) Then

            stroke.DrawingAttributes = New DrawingAttributes(Color.Red)
        Else
            stroke.DrawingAttributes = Me.theInkCollector.DefaultDrawingAttributes
        End If
    Next

    theNotesPanel.Refresh()
End Sub


private void BuildTree()
{
    this.theTreeView.Nodes.Clear();
    TreeNode rootNode =
        new TreeNode(this.theInkAnalyzerBase.RootNode.ToString());
    this.theTreeView.Nodes.Add(rootNode);
    rootNode.Tag = this.theInkAnalyzerBase.RootNode;

    WalkTree(this.theInkAnalyzerBase.RootNode, rootNode);
}

private void WalkTree(
    System.Windows.Ink.AnalysisCore.ContextNodeBase parentContextNode, TreeNode parentTreeNode)
{
    foreach (ContextNodeBase cNode in parentContextNode.SubNodes)
    {
        TreeNode newTNode = new TreeNode(cNode.ToString());
        if ((cNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.InkWord) &&
             cNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.RecognizedString))
        {
            // Get the recognized string
            newTNode.Text += ": " +
                (string)cNode.GetPropertyData(PropertyGuidsForContextNodesBase.RecognizedString);
        }
        else if ((cNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.InkDrawing) &&
                  cNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.ShapeName))
        {
            newTNode.Text += ": " +
                (string)cNode.GetPropertyData(PropertyGuidsForContextNodesBase.ShapeName);
        }
        WalkTree(cNode, newTNode);
        parentTreeNode.Nodes.Add(newTNode);

        // Add the context node as a tag of the tree node
        newTNode.Tag = cNode;
    }
}

private void theTreeView_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
    // Get the context node
    ContextNodeBase selectedNode = (ContextNodeBase)e.Node.Tag;

    MarkNodeAsRed(selectedNode);

    timeStampLabel.Text = "";

    // Show selected results
    if (selectedNode != null)
    {
        if (selectedNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.RecognizedString) &&
           (selectedNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.WritingRegion ||
            selectedNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.Paragraph ||
            selectedNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.CustomRecognizer ||
            selectedNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.Object ||
            selectedNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.Line))
        {
            selectedResultsTextBox.Text =
                (string)selectedNode.GetPropertyData(PropertyGuidsForContextNodesBase.RecognizedString);
        }
        else if (selectedNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.InkWord)
        {
            ContextNodeBase parentNode = selectedNode.ParentNode;
            if (parentNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.Line &&
                parentNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.RecognizedString))
            {
                // Put parent line's recognized string into the text box
                selectedResultsTextBox.Text =
                    (string)parentNode.GetPropertyData(PropertyGuidsForContextNodesBase.RecognizedString);

                // Select the text that corresponds to the ink word
                ContextNodeBaseCollection subNodes = new ContextNodeBaseCollection(theInkAnalyzerBase);
                subNodes.Add(selectedNode);
                int start;
                int length;
                theInkAnalyzerBase.GetTextRangeFromNodes(subNodes, out start, out length);
                if (start >= 0 && length > 0)
                {
                    selectedResultsTextBox.Select(start, length);
                }
            }
        }
        else if (selectedNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.InkDrawing &&
                 selectedNode.ContainsPropertyData(PropertyGuidsForContextNodesBase.ShapeName))
        {
            selectedResultsTextBox.Text =
                (string)selectedNode.GetPropertyData(PropertyGuidsForContextNodesBase.ShapeName);

        }

        if (selectedNode.Type == System.Windows.Ink.AnalysisCore.ContextNodeTypeBase.InkWord)
        {
            // Show the time stamp
            if (selectedNode.ContainsPropertyData(this.timeStampGuid))
            {
                DateTime timeStamp =
                    (DateTime)selectedNode.GetPropertyData(this.timeStampGuid);
                timeStampLabel.Text = timeStamp.ToShortTimeString();
            }

            // Snippet to demonstrate GetPropertyDataIds
            Guid[] propertyDataIds = selectedNode.GetPropertyDataIds();
            // Snippets to demonstrate loading and saving
            byte[] data = selectedNode.SavePropertiesData();
            if (!selectedNode.LoadPropertiesData(data))
                MessageBox.Show("Cannot load property data");
        }
    }
    this.currentNode = selectedNode;
}

private void MarkNodeAsRed(ContextNodeBase selectedNode)
{
    Strokes selectedNodeStrokes = null;

    if (selectedNode != null)
    {
        selectedNodeStrokes = theInk.CreateStrokes(selectedNode.GetStrokeIds());
    }

    // Set all node strokes to black, but this one to red
    foreach (Stroke stroke in this.theInkCollector.Ink.Strokes)
    {
        if (selectedNodeStrokes != null &&
            selectedNodeStrokes.Contains(stroke))
            stroke.DrawingAttributes = new DrawingAttributes(Color.Red);
        else
            stroke.DrawingAttributes = this.theInkCollector.DefaultDrawingAttributes;
    }

    theNotesPanel.Refresh();
}

Vererbungshierarchie

System.Object
  System.Windows.Ink.AnalysisCore.ContextNodeBase

Threadsicherheit

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows Vista, Windows XP SP2, Windows Server 2003

.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

ContextNodeBase-Member

System.Windows.Ink.AnalysisCore-Namespace

System.Windows.Ink.AnalysisCore.ContextNodeBase