簡體   English   中英

C#如何在TreeView控件Winform的所有父級和子級節點中搜索文本

[英]C# How to search a text in all parent & child nodes of treeview control winform

我正在所有樹狀視圖的父級和子級節點中遞歸搜索文本,但未按預期工作。

請參閱下面的代碼,在其中我無法在父母與子女的所有節點中搜索文本的地方,這無法正常工作。 請指導我我需要修理的東西。

private void txtSerach_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
        if (txtSerach.Text.Trim() != "")
        {
            if (treeView1.Nodes.Count > 0)
            {
            nodefound = false;

            TreeNodeCollection nodes = treeView1.Nodes;
            foreach (TreeNode n in nodes)
            {
                if (!nodefound)
                PrintRecursive(n);
                else
                return;
            }
            }
        }
        }
    }

bool nodefound = false;

private void PrintRecursive(TreeNode treeNode)
{
    if (treeNode.Text.ToUpper().Contains(txtSerach.Text.ToUpper().ToString()))
    {
    treeView1.SelectedNode = treeNode;
    treeView1.SelectedNode.Expand();
    treeView1.Focus();
    nodefound = true;
    return;
    }

    foreach (TreeNode tn in treeNode.Nodes)
    {
    PrintRecursive(tn);
    }
}

屏幕截圖 在此處輸入圖片說明

應當在所有父級和所有嵌套節點中搜索文本,如果找到,則應選擇該節點。

謝謝

嘗試。

        private void txtSerach_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtSearch.Text.Trim() != "")
                {
                    if (treeView1.Nodes.Count > 0)
                    {
                        TreeNodeCollection nodes = treeView1.Nodes;
                        var selected = PrintRecursive(nodes, txtSearch.Text);
                        treeView1.SelectedNode = selected;
                        treeView1.SelectedNode.Expand();
                        treeView1.Focus();
                    }
                }
            }
        }


        private TreeNode PrintRecursive(TreeNodeCollection parents, string txtSearch)
        {
            foreach (TreeNode node in parents)
            {
                if (node.Nodes != null && node.Nodes.Count > 0)
                {
                    var rs = PrintRecursive(node.Nodes, txtSearch);
                    if (rs != null)
                    {
                        return rs;
                    }
                }
                if (node.Text.ToUpper().Contains(txtSearch.ToUpper().ToString()))
                {
                    return node;
                }
            }
            return null;
        }

此代碼從樹中找到密鑰:

    public TreeNode Find(TreeNodeCollection nodes, string key)
    {
        key = key.ToUpper();
        Stack<TreeNode> stackNodes = new Stack<TreeNode>();
        foreach (TreeNode item in nodes)
        {
            stackNodes.Push(item);
        }

        while (stackNodes.Count > 0)
        {
            TreeNode currentNode = stackNodes.Pop();
            if (currentNode.Text.ToUpper() == key)
                return currentNode;
            else
                foreach (TreeNode item in currentNode.Nodes)
                {
                    stackNodes.Push(item);
                }
        }

        return null;
    }

您可以這樣稱呼它:

    private void findButton_Click(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(keyTextBox.Text.Trim()))
        {
            var result = Find(treeView1.Nodes, keyTextBox.Text.Trim());
            if (result != null)
            {
                treeView1.SelectedNode = result;
                treeView1.Focus();
            }
        }
    }

在此處輸入圖片說明

嘗試這個 :

      private void txtSerach_KeyUp(object sender, KeyEventArgs e)
      {
         if (e.KeyCode == Keys.Enter)
         {
            var searchFor = txtSerach.Text.Trim().ToUpper();
            if (searchFor != "")
            {
               if (treeView1.Nodes.Count > 0)
               {
                  if (SearchRecursive(treeView1.Nodes, searchFor))
                  {
                     treeView1.SelectedNode.Expand();
                     treeView1.Focus();
                  }
               }
            }
         }
      }

      private bool SearchRecursive(IEnumerable nodes, string searchFor)
      {
         foreach (TreeNode node in nodes)
         {
            if (node.Text.ToUpper().Contains(searchFor))
            {
               treeView1.SelectedNode = node;
               return true;
            }

            if (SearchRecursive(node.Nodes, searchFor))
               return true;
         }

         return false;
      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM