首页 > 解决方案 > 如何在 C# 中查找数组中的子字符串?

问题描述

我们在层次结构中构建的员工编号都在 TreeView 中

我想突出显示一些员工以及该员工下的所有员工

例子

员工ID

A1 CEO
   A12 CIO
     A12.1  Software Manager
         A12.11  Java Developer
         A12.12  .Net Developer
         A12.13  Python Developer
     A12.2  Data Manager
         A12.21  Data Analyst
         A12.22  Data Scientist
   A22 CFO
     A22.1  Accounting Manager
         A22.11  Accountant
         A22.12  Auditor

员工列表将作为字符串发送

"A12.11,A12.2,A22"

在这种情况下,A12.2 下的所有员工也应突出显示,A22 下的所有员工也应突出显示

所以这些员工应该被突出

A12.11
A12.2
A12.21
A12.22
A22
A22.1
A22.11
A22.12

我构建了这段代码来选择所有员工,但它只突出显示确切的员工而不是他们下的员工

       foreach (TreeNode tn in nodes)
        {
            if (EmpSelect.Split(',').Contains(tn.Name))
            {
                tn.ForeColor = Color.Red;
            }
        }  

知道如何使此代码突出显示下的所有员工和员工吗?

标签: c#

解决方案


如果您查看有关How to: Iterate Through All Nodes of a Windows Forms TreeView Control的 microsoft 文档,您将看到递归修改单个节点下的所有节点的简单方法。

这是您的问题的修改示例:

private void SetColorOnNodeAndSubNodes(TreeNode treeNode, Color color)
{
    // Color this node
    treeNode.ForeColor = color;

    // Color its children 
    foreach (TreeNode childNode in treeNode.Nodes)
    {
        SetColorOnNodeAndSubNodes(childNode, color);
    }
}

然后在您的示例代码中,您将执行以下操作:

foreach (TreeNode tn in nodes)
{
    if (EmpSelect.Split(',').Contains(tn.Name))
    {
        SetColorOnNodeAndSubNodes(tn, Color.Red);
    }
}  

推荐阅读