下面是一个示例代码,演示如何实现你描述的功能:

private void Button1_Click(object sender, EventArgs e)
{
    string searchText = textBox5.Text.ToLower(); // 获取要查找的文本并转换为小写

    // 递归查找并标记匹配的节点
    FindAndMarkNodes(treeView1.Nodes, searchText);

    // 展开所有被标记的节点
    ExpandMarkedNodes(treeView1.Nodes);
}

private bool FindAndMarkNodes(TreeNodeCollection nodes, string searchText)
{
    bool hasMatch = false;

    foreach (TreeNode node in nodes)
    {
        // 检查当前节点是否匹配
        if (node.Text.ToLower().Contains(searchText))
        {
            node.BackColor = Color.Yellow; // 标记背景色为黄色
            node.Expand(); // 展开匹配的节点
            hasMatch = true;
        }

        // 递归查找子节点
        if (node.Nodes.Count > 0)
        {
            bool childMatch = FindAndMarkNodes(node.Nodes, searchText);
            hasMatch = hasMatch || childMatch;
        }
    }

    return hasMatch;
}

private void ExpandMarkedNodes(TreeNodeCollection nodes)
{
    foreach (TreeNode node in nodes)
    {
        if (node.BackColor == Color.Yellow)
        {
            node.Expand(); // 展开标记的节点
            node.BackColor = Color.Yellow; // 保持背景色为黄色
        }

        // 递归展开子节点
        if (node.Nodes.Count > 0)
        {
            ExpandMarkedNodes(node.Nodes);
        }
    }
}

在上述代码中,我们使用了两个辅助函数 FindAndMarkNodesExpandMarkedNodes

FindAndMarkNodes 函数用于递归查找并标记匹配的节点。它接受一个节点集合作为参数,遍历每个节点,检查节点的文本是否包含搜索文本。如果匹配,则将节点的背景色标记为黄色,并展开节点。然后,递归调用该函数来查找子节点。

ExpandMarkedNodes 函数用于展开所有被标记的节点。它接受一个节点集合作为参数,遍历每个节点,如果节点的背景色为黄色,则展开该节点,并保持背景色为黄色。然后,递归调用该函数来展开子节点。

你可以将以上代码添加到按钮的点击事件处理程序中,以实现你描述的功能。请注意,这只是一个示例代码,你可能需要根据你的实际需求进行适当的修改

C# 通过按钮1在treeview1中根据textbox5的值对三级节点进行模糊查找如果有匹配的三级节点则展开选中并标记背景色为黄色然后再点击按钮1则在当前匹配的节点后面继续查找下一个匹配节点找到后也是展开并标记背景色为黄色

原文地址: https://www.cveoy.top/t/topic/it1J 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录