【问题标题】:Filter Tree-View with similar word on the TreeNode.Text C#在 TreeNode.Text C# 上过滤具有相似词的树视图
【发布时间】:2016-04-16 19:17:01
【问题描述】:

我需要在 Winforms 上过滤树。 基本上,树视图包含注册表中的列表以及分支上的所有键

现在,当我运行该方法在所有树中搜索某些值时,我得到的结果只是树的一部分,我无法保存从结果连接到根的分支。 有任何方法可以保存最终结果将正确显示的层次结构。 ?

我试图将它放在包含带有级别、索引和完整路径的字符串的字典上。任何想法?

这是搜索代码。字典基本上是为了显示结果。用于测试

Dictionary<string, TreeNode> Result = new Dictionary<string, TreeNode>();  

private void SearchforNodes(TreeNodeCollection nodes)
    {
        bool x = true;

        while (x)
        {
            foreach (TreeNode item in nodes)
            {
                x = ReadAllKeys(item);
            }
        }

    }
    bool flag = true;
    private bool ReadAllKeys(TreeNode node)
    {


        foreach (TreeNode item in node.Nodes)
        {
            if (item.Nodes.Count > 0)
            {
                ReadAllKeys(item);
            }
            else
            {
                var result = SearchKey(item);
                if (result != null)
                {
                    if (!Result.Keys.Contains(string.Format("Index: {0} level: {1} Text: {2}  FullPathTree: {3}  ", result.Index, result.Level, result.Text, result.FullPath)))
                    {
                        Result.Add(string.Format("Index: {0} level: {1} Text: {2}  FullPathTree: {3}  ", result.Index, result.Level, result.Text, result.FullPath), result);
                        flag = false;

                    }
                    else
                    {
                        flag = false;
                    }

                }
            }
        }

        return flag;
    }

    private TreeNode SearchKey(TreeNode node)
    {
        if (node.Text.ToUpper().Contains(txtSearch.Text.ToUpper()))
        {
            return node;
        }
        else
        {
            return null;
        }

    }

【问题讨论】:

    标签: c# recursion treeview registry treenode


    【解决方案1】:

    我记得在使用 Treeview 时,在用于包含用于树的数据的类/类中,我们通常添加一个 Parent 或 ParentID 字段,以便每个节点直到叶子知道谁是它的父节点。 这对于设置除叶子之外的哪些节点必须可见是有用的。 我们的数据类通常在数据表或集合中,但也总是放在树节点的标签元素中,以便能够访问节点中的所有信息。 (标签是一个对象,因此您可以附加您的类或数据行,然后通过强制转换检索它们)

    如果您只是使用树中的标准节点元素作为数据源,我确定该节点具有Parent信息,以便您可以在过滤所有元素后添加到要显示的可见元素的集合中直到根。

    我发现在处理树数据时有用的另一件事是拥有所有节点的普通集合,例如在构建树时更新列表,并使用该集合来设置节点及其父节点、祖先节点和以此类推。

    我不确定这是否正是您所需要的,但我希望它可以让您走上正确的道路。

    【讨论】:

    • 是的,但是当我搜索特定节点时,我得到了孔路径,我不能像树一样再次显示它..:S
    • 您能否发布您在树中加载的数据的示例,以便我可以构建一个示例来帮助您
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多