积极答复者
treeview节点查找?

问题
-
我想在WINFORM中的treeview中做一个节点查找,类似记事本中可以“查找下一个“的那样,但是每次只能找到第一个,不能往下遍历查找,请大家帮帮忙?
- 已移动 Sheng Jiang 蒋晟Moderator 2009年5月14日 18:08 Windows表单类库问题 ([Loc]From:Visual C#)
- 已移动 微软中文技术论坛Moderator 2009年5月20日 2:18 ([Loc]From:.NET Framework 一般性问题讨论区)
答案
-
如果要实现类似“查找下一个的功能”,最少有以下两种方法:
1、维护一个列表,用于保存已搜索到的项,每次都从根节点开始搜索,找到匹配项时,先判断项是否在列表中,是则继续继续查找,否则返回该项。
2、每次找到一个匹配项好,记录该项位置,下次搜索时,从记录的位置开始搜索。如果能够定义一个固定的搜索顺序,则不会找到重复的结果。
不知道我对你的问题的理解是否正确。
如果确实是这个问题,你应该描述一下你的实现方式。- 已建议为答案 肖小勇Moderator 2009年5月15日 5:38
- 已标记为答案 Riquel_DongModerator 2009年5月20日 7:47
全部回复
-
如果要实现类似“查找下一个的功能”,最少有以下两种方法:
1、维护一个列表,用于保存已搜索到的项,每次都从根节点开始搜索,找到匹配项时,先判断项是否在列表中,是则继续继续查找,否则返回该项。
2、每次找到一个匹配项好,记录该项位置,下次搜索时,从记录的位置开始搜索。如果能够定义一个固定的搜索顺序,则不会找到重复的结果。
不知道我对你的问题的理解是否正确。
如果确实是这个问题,你应该描述一下你的实现方式。- 已建议为答案 肖小勇Moderator 2009年5月15日 5:38
- 已标记为答案 Riquel_DongModerator 2009年5月20日 7:47
-
泉子兄,说的很对,按照你说的方法2怎么实现,我有代码帮我改下,谢谢
demo
http://www.cnxinshe.com./treesearch.rar
方法
http://blog.csdn.net/zx13525079024/archive/2009/05/16/4191269.aspx
msn:2008xiangzhang@live.cn -
这位同学,你写了FindNextNode、FindPrevNode等函数,可是我看不出来你是怎么是到查找结果的。
我写了一个函数如下:/// <summary> /// 查找下一个节点 /// </summary> /// <param name="direction">查找方向</param> /// <param name="startNode">起始结点</param> /// <param name="match">匹配委托</param> /// <returns>返回找到的下一个节点,若未找到,则返回null</returns> public TreeNode FindNextNode(Direction direction, TreeNode startNode, Predicate<TreeNode> match) { int StartIdx; //搜索起始位置的索引 int BoundaryIdx; //边界索引 int Step = 0; //步进值 //初始化搜索范围 if (direction == Direction.next) { StartIdx = -1; BoundaryIdx = _TreeView.Nodes.Count; Step = 1; } else { StartIdx = _TreeView.Nodes.Count; BoundaryIdx = -1; Step = -1; } //查找起始节点 if (startNode != null) { for (int idx = 0; idx < _TreeView.Nodes.Count; ++idx) { if (_TreeView.Nodes[idx] == startNode) { StartIdx = idx; break; } } } //搜索一下个节点 for (int idx = StartIdx + Step; idx != BoundaryIdx; idx+=Step) { if (match(_TreeView.Nodes[idx])) return _TreeView.Nodes[idx]; } return null; }
不怎么是否能满足你的要求。
有一点要说明的是,TreeView.Nodes不会包含树中所有节点,此集合仅包含其中的根节点。如果是要在TreeView中所有节点中进行查找,则需要使用类似于树遍历的算法的来查找。
- 已编辑 泉子 2009年5月20日 1:00