![](/img/trans.png)
[英]List all child nodes of a parent node in a treeview control in Visual C#
[英]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.