winform实现TreeView控件的节点搜索功能
如图所示我要实现在搜索里输入“控规”指定查询内容,则匹配到的所有节点的父节点展开并且该节点加深颜色显示;
代码思路:先用String.Contains()匹配查询内容找到所有符合查询的节点,然后对这些节点进行展开并高亮显示。
具体代码:
1、搜索按钮下代码:
List<TreeNode> searchtreeNodes;
private void searchtoolbutton_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(searchtooltext.Text))
{
MessageBox.Show("请输入搜索内容!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
searchtreeNodes = new List<TreeNode>();
foreach (TreeNode node in tvMapLyMgr.Nodes)
{
SearchLayer(node, this.searchtooltext.Text);
}
for (int i = 0; i < searchtreeNodes.Count; i++)
{
TreeNode temp = searchtreeNodes[i];
ExpandNode(temp);
if (i == 0 && temp.Parent != null)
{
tvMapLyMgr.SelectedNode = temp.Parent;
}
temp.BackColor = Color.Blue;
}
}
2、寻找方法和展开树节点方法
private void SearchLayer(TreeNode node, string name)
{
if (node.Nodes.Count != 0)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
SearchLayer(node.Nodes[i], name);
}
}
else if (string.Equals(node.Text, name) || node.Text.Contains(name))
{
searchtreeNodes.Add(node);
}
}
private void ExpandNode(TreeNode node)
{
if (node.Parent != null)
{
node.Expand();
ExpandNode(node.Parent);
}
}