2013-05-27 14 views
0

我正在使用Winform應用程序,我如何檢查是否有其文本在string Mystring內部的treeNode?我該如何檢索這個節點的標籤?比較treeView節點文本到字符串

if (myString.Contains(treeView1.Nodes.ToString())) 
+0

嗯,你的示例代碼,treeView1.Nodes將只檢查TreeView控件的第一等級。這就是你想要的,還是你想與treeView的所有節點進行比較? –

+0

我想比較所有的節點,但我不知道如何。 –

回答

1

這適用於僅第一個匹配的節點內的第一個節點。

private TreeNode FindMatchedNode(TreeNodeCollection tnCol, string text) 
{ 
    TreeNode tn = null; 

    foreach (TreeNode node in tnCol) 
    { 
     if (text.ToLower().Contains(node.Text.ToLower())) 
     { 
      tn = node; 
      break; 
     } 
     else if (node.Nodes != null) 
     { 
      tn = FindNode(node.Nodes, text); 

      if (tn != null) 
       break; 
     } 
    } 

    return tn; 
} 

,併爲所有匹配的節點

private List<TreeNode> FindAllMatchedNodes(TreeNodeCollection tnCol, string text) 
{ 
    List<TreeNode> retVal = new List<TreeNode>(); 

    foreach (TreeNode node in tnCol) 
    { 
     if (text.ToLower().Contains(node.Text.ToLower())) 
     { 
      retVal.Add(node); 
     } 
     else if (node.Nodes != null) 
     { 
      retVal.AddRange(FindNode(node.Nodes, text)); 
     } 
    } 

    return retVal; 
} 
0

這個方法會從根遍歷樹,發現TextmyString

public object FindNode() 
{ 
    var queue = new Queue<TreeNode>(); 

    foreach (var n in treeView1.Nodes) 
    { 
     // Add all root nodes to queue 
     queue.Enqueue(n); 
    } 

    while (queue.Count > 0) 
    { 
     // Take the next node from the front of the queue 
     var node = queue.Dequeue(); 

     // Check if myString contains node text 
     if (myString.Contains(node.Text)) 
      return node.Tag; 

     // Add the node’s children to the back of the queue 
     foreach (var child in node.Children) 
     { 
      queue.Enqueue(child); 
     } 
    } 

    // None of the nodes matched the specified string. 
    return null; 
} 
+0

'var queue = new Queue ();':''沒有重新調整..一個指令缺少...? –

+0

'node.Text'和'node.Tag'和'node.Children'也無法識別! –

+0

啊對不起,應該是'TreeNode',編輯我的帖子。 – gzaxx