怎样在一个TreeView中找到一个Tag为特定值的Node? 怎样在一个TreeView中找到一个Tag为特定值的Node,并把它设置为选中状态? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以递归遍历所有NODES判断节点的TAG是否相等 如果相等,那就把这个NODE的selected 设置为true 你可以按深度优先(算法:查一个儿子后再查儿子的儿子,如此递归,直到查到最后,没找到就从第二个儿子再如此查下去)或广度优先(算法:查所有的儿子,如果没有查到,则再查所有的孙子,如此递归)查找指定的节点下面给出按深度优先具体实现算法/// <summary>/// 按深度优先查找指定的节点,找到即退出,即只找最先找到的一个节点。/// </summary>/// <param name="p_treeNodes">节点集</param>/// <param name="p_string">比较的字符</param>/// <param name="p_byValueOrText">true按节点值比较,否则按节点的Text比较</param>/// <Info>/// <作者>周方勇(长江支流)</作者>/// <blog>http://blog.csdn.net/flygoldfish</blog>/// </Info>/// <returns>返回最先找到的一个节点</returns>public TreeNode FindTreeNodeByDepth(TreeNodeCollection p_treeNodes,string p_string,bool p_byValueOrText){ TreeNode treeNodeReturn = null; #region 实现,按深度优先查找,找到即退出... string strKeyText = ""; string strValueText = ""; foreach(TreeNode node in p_treeNodes) { //取当前节点键值 GetTreeNodeValueText(node,ref strKeyText,ref strValueText); //根据键比 if (p_byValueOrText) { if (strKeyText == p_string) { treeNodeReturn = node; } } else { //否则根据值比 if (strValueText == p_string) { treeNodeReturn = node; } } //找到即退出 if ( treeNodeReturn != null ) { break; } else { //深度优先查询 if (node.Nodes.Count > 0) { treeNodeReturn = FindTreeNodeByDepth(node.Nodes,p_string,p_byValueOrText); } } } #endregion return treeNodeReturn;}这里用到一个统一取节点键值的方法 public void GetTreeNodeValueText(TreeNode p_treeNode,ref string p_value,ref string p_text) { //取键值 p_value = p_treeNode.Tag.ToString(); p_text = p_treeNode.Text; } 大家好,这段时间真的太忙了,一直封闭加班开发,刚解放。以后准备在我的bloghttp://blog.csdn.net/flygoldfish继打印之后,写tree一系列的分级加载、查找定位等算法,欢迎大家一起交流!还准备把MIS快速开发的源码在我的网上www.webmis.com.cn发布调用如下:TreeView tree = 你的树;TreeNode node = FindTreeNodeByDepth(tree.Nodes,"123",true);if (node != null){ tree.SelectedNode = node; //高亮显示节点 node.Checked = true; //如果节点前有复选框,可以如此} 我的tree都是跟dataSet填充生成的可以查询DataSet然后再生成Tree 窗体件传递数据问题 C# 问题 c# treeview问题,请高手帮忙!急急! 新装的vs2005新建项目,没有解决方案,添加不了项目 多个类对共有变量的访问实现 求助:c# 如何实现 键盘 “按键被释放才响应” 在线等 菜鸟提问:大家帮我看看这个是什么,怎么生成的 委托中可以传入对象的构造函数吗? C++ API操作问题 API 如何将WORD文档嵌入到FreeTextBox编辑框中显示,解决立马给分!! [推荐]精品OA下载(包括完整的源程序、文档及数据库) (已上传到个人主页的空间)
判断节点的TAG是否相等 如果相等,那就把这个NODE的selected 设置为true
/// 按深度优先查找指定的节点,找到即退出,即只找最先找到的一个节点。
/// </summary>
/// <param name="p_treeNodes">节点集</param>
/// <param name="p_string">比较的字符</param>
/// <param name="p_byValueOrText">true按节点值比较,否则按节点的Text比较</param>
/// <Info>
/// <作者>周方勇(长江支流)</作者>
/// <blog>http://blog.csdn.net/flygoldfish</blog>
/// </Info>
/// <returns>返回最先找到的一个节点</returns>
public TreeNode FindTreeNodeByDepth(TreeNodeCollection p_treeNodes,string p_string,bool p_byValueOrText)
{
TreeNode treeNodeReturn = null; #region 实现,按深度优先查找,找到即退出... string strKeyText = "";
string strValueText = ""; foreach(TreeNode node in p_treeNodes)
{
//取当前节点键值
GetTreeNodeValueText(node,ref strKeyText,ref strValueText); //根据键比
if (p_byValueOrText)
{
if (strKeyText == p_string)
{
treeNodeReturn = node;
}
}
else
{
//否则根据值比
if (strValueText == p_string)
{
treeNodeReturn = node;
}
} //找到即退出
if ( treeNodeReturn != null )
{
break;
}
else
{
//深度优先查询
if (node.Nodes.Count > 0)
{
treeNodeReturn = FindTreeNodeByDepth(node.Nodes,p_string,p_byValueOrText);
}
} } #endregion return treeNodeReturn;
}
这里用到一个统一取节点键值的方法 public void GetTreeNodeValueText(TreeNode p_treeNode,ref string p_value,ref string p_text)
{
//取键值
p_value = p_treeNode.Tag.ToString();
p_text = p_treeNode.Text;
}
http://blog.csdn.net/flygoldfish
继打印之后,写tree一系列的分级加载、查找定位等算法,欢迎大家一起交流!
还准备把MIS快速开发的源码在我的网上www.webmis.com.cn发布调用如下:TreeView tree = 你的树;
TreeNode node = FindTreeNodeByDepth(tree.Nodes,"123",true);
if (node != null)
{
tree.SelectedNode = node; //高亮显示节点
node.Checked = true; //如果节点前有复选框,可以如此
}