C# 在TreeNode.Text C上使用类似单词筛选树视图#
我需要过滤Winforms上的树。 基本上,树状视图包含注册表中的列表以及分支上的所有键 现在,当我运行方法搜索所有树中的一些值时,我得到的结果只是树的一部分,我无法保存从结果连接到根的分支。 有任何方法可以保存层次结构,最终结果将正确显示 我试着把它放在包含有级别、索引和完整路径的字符串的字典上。有什么想法吗 这是搜索代码。字典基本上显示结果。用于测试C# 在TreeNode.Text C上使用类似单词筛选树视图#,c#,recursion,treeview,registry,treenode,C#,Recursion,Treeview,Registry,Treenode,我需要过滤Winforms上的树。 基本上,树状视图包含注册表中的列表以及分支上的所有键 现在,当我运行方法搜索所有树中的一些值时,我得到的结果只是树的一部分,我无法保存从结果连接到根的分支。 有任何方法可以保存层次结构,最终结果将正确显示 我试着把它放在包含有级别、索引和完整路径的字符串的字典上。有什么想法吗 这是搜索代码。字典基本上显示结果。用于测试 Dictionary<string, TreeNode> Result = new Dictionary<string, T
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;
}
}
字典结果=新建字典();
私有void SearchforNodes(TreeNodeCollection节点)
{
布尔x=真;
while(x)
{
foreach(节点中的TreeNode项)
{
x=ReadAllKeys(项目);
}
}
}
布尔标志=真;
私有bool ReadAllKeys(TreeNode节点)
{
foreach(node.Nodes中的TreeNode项)
{
如果(item.Nodes.Count>0)
{
ReadAllKeys(项目);
}
其他的
{
var结果=搜索键(项目);
如果(结果!=null)
{
if(!Result.Keys.Contains(string.Format(“索引:{0}级别:{1}文本:{2}完整路径树:{3}”),Result.Index,Result.level,Result.Text,Result.FullPath)))
{
Add(string.Format(“索引:{0}级别:{1}文本:{2}完整路径树:{3}”,Result.Index,Result.level,Result.Text,Result.FullPath),Result);
flag=false;
}
其他的
{
flag=false;
}
}
}
}
返回标志;
}
专用TreeNode搜索密钥(TreeNode节点)
{
if(node.Text.ToUpper().Contains(txtSearch.Text.ToUpper()))
{
返回节点;
}
其他的
{
返回null;
}
}
我记得在使用TreeView时,在用于包含用于树的数据的类中,我们通常添加一个父节点或一个ParentID字段,以便每个节点直到叶知道谁是它的父节点。
这对于设置除叶以外的哪些节点必须可见非常有用。
我们的数据类通常位于datatable或collection中,但也总是放在treenode的tag元素中,以便能够访问来自节点的所有信息。(标记是一个对象,因此您可以附加类或数据行,然后使用强制转换检索它们)
如果您只是使用树中的标准节点元素作为数据源,我确信该节点具有父级信息,以便您可以在过滤到根的所有元素后添加到要显示的可见元素集合中
在处理树数据时,我发现另一件有用的事情是拥有所有节点的普通集合,例如在构建树时更新列表,并使用该集合设置节点及其父节点、祖先节点等的可见性
我不确定这是否正是您所需要的,但我希望它能将您设置到正确的路径。关于我在使用TreeView时所记得的内容,在用于包含树数据的类中,我们通常添加一个Parent或ParentID字段,以便每个节点直到叶知道谁是它的父节点。 这对于设置除叶以外的哪些节点必须可见非常有用。 我们的数据类通常位于datatable或collection中,但也总是放在treenode的tag元素中,以便能够访问来自节点的所有信息。(标记是一个对象,因此您可以附加类或数据行,然后使用强制转换检索它们) 如果您只是使用树中的标准节点元素作为数据源,我确信该节点具有父级信息,以便您可以在过滤到根的所有元素后添加到要显示的可见元素集合中 在处理树数据时,我发现另一件有用的事情是拥有所有节点的普通集合,例如在构建树时更新列表,并使用该集合设置节点及其父节点、祖先节点等的可见性
我不确定这是否正是您所需要的,但我希望它可以将您设置为正确的路径。是的,但当我搜索特定节点时,我得到了孔路径,我无法将其再次显示为树扫描您将加载的数据样本发布到树中,以便我可以构建一个样本来帮助您是的,但当我搜索特定节点时,我得到了孔路径,无法将其再次显示为树..:扫描您在树中加载的数据样本,以便我可以构建一个样本来帮助您