请教treeview定位的问题

anewbaba 2005-11-29 03:44:34
请教高手,怎样实现通过输入节点名或节点index将treeview自动定位到那里?比如说我的treeview的结构是1、1.1、1.2、2、3、4。。。我通过输入1.1,如何将它定位到1.1那个节点。谢谢。
...全文
400 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
anewbaba 2005-12-07
  • 打赏
  • 举报
回复
行了,谢谢各位。
结贴:)
anewbaba 2005-12-07
  • 打赏
  • 举报
回复
谢谢古道热肠。看起来应该可以实现。
我先试试,确定行了再结贴。
谢谢各位。
swordragon 2005-12-05
  • 打赏
  • 举报
回复
执行FindInTree(你的节点的Text)

private void FindInTree(string strNodeName)
{
foreach (TreeNode tn in TreeView1.Nodes)
{
if (tn.Text != strNodeName)
{
FindInTree(tn,strNodeName);
}
else
{
ExpandTree(tn);
return;
}
}
}

private void FindInTree(TreeNode objTreeNode,string strNodeName)
{
foreach (TreeNode tn in objTreeNode.Nodes)
{
if (tn.Text != strNodeName)
{
FindInTree(tn,strNodeName);
}
else
{
ExpandTree(tn);
return;
}
}
}

private void ExpandTree(TreeNode objTreeNode)
{
string strIndex = "0";

objTreeNode.Expanded = true;

strIndex = objTreeNode.GetNodeIndex();

while (objTreeNode.Parent is TreeNode)
{
objTreeNode = ((TreeNode)objTreeNode.Parent);
objTreeNode.Expanded = true;
}

TreeView1.SelectedNodeIndex = strIndex;
}
anewbaba 2005-12-05
  • 打赏
  • 举报
回复
搞了几天还是没解决。我现在的问题是如何在生成树的时候获取它的index。比如说我的树有三层,第一层第一个节点的第二层的第一个节点的index应该是0.0,我应该怎样获取?
jxufewbt 2005-11-29
  • 打赏
  • 举报
回复
http://adandelion.cnblogs.com/articles/235681.html
http://www.cnblogs.com/renyu732/archive/2005/09/27/244735.html
anewbaba 2005-11-29
  • 打赏
  • 举报
回复
arice1983(一粒米),我的Node没IsSelected属性,Treeview也没SelectedNode,这是不是因为我用的是webcontrols的缘故?还是其他原因呢?谢谢
anewbaba 2005-11-29
  • 打赏
  • 举报
回复
Knight94(愚翁),我搞的是web程序,我试过用SelectedNodeIndex,但没搞定,可能不会用,能详细说一说吗?
anewbaba 2005-11-29
  • 打赏
  • 举报
回复
好,先谢各位了,我先看看。
JasonHeung 2005-11-29
  • 打赏
  • 举报
回复
arice1983(一粒米) ( ) 信誉:100 2005-11-29 16:08:00 得分: 0


改进了一下
private bool GetAllNode(System.Windows.Forms.TreeNodeCollection nodes)
{


foreach(System.Windows.Forms.TreeNode tn in nodes)
{
if(tn.Text==textBox1.Text)
{
treeView1.SelectedNode = tn;
return true;
}
if (true == GetAllNode(tn.Nodes))
{
return true;
}
}
return false;
}

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
GetAllNode(treeView1.Nodes);

}



singleflower 2005-11-29
  • 打赏
  • 举报
回复
这个问题确实比较麻烦,你可以通过继承treeview来实现记录其索引结构,然后实现他的查找方法。
或者你把目录结构定义在数据库表中,在初始化树把他的结构位置绑定到treeview的TAG属性也可以。
arice1983 2005-11-29
  • 打赏
  • 举报
回复
改进了一下
private void GetAllNode(System.Windows.Forms.TreeNodeCollection nodes)
{


foreach(System.Windows.Forms.TreeNode tn in nodes)
{
if(tn.Text==textBox1.Text)
{
treeView1.SelectedNode = tn;
}
GetAllNode(tn.Nodes);
}

}

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
GetAllNode(treeView1.Nodes);

}
Knight94 2005-11-29
  • 打赏
  • 举报
回复
如果是web的方式话且用的是microsoft webcontrols的话,可以通过SelectedNodeIndex来设置;
而form方式的话,没有简便的方法。
arice1983 2005-11-29
  • 打赏
  • 举报
回复
foreach(TreeNode tn in e.Node.Nodes )
{
if(tn.Text=="xxxx")
{
tn.IsSelected = true;
}
}
anewbaba 2005-11-29
  • 打赏
  • 举报
回复
我生成树的代码如下:
TreeNode newroot = new TreeNode();
newroot.ID="";
newroot.Text="总目录";
CatalogTree.Nodes.Add(newroot);
FillTree(newroot,ds);//ds为一dataset

private void FillTree(TreeNode root,DataSet ds)
{
  for(int i=0;i<ds.Tables[0].Rows.Count;i++)
  {
TreeNode newroot = new TreeNode();
newroot.ID=ds.Tables[0].Rows[i]["catalogid"].ToString().Trim();
newroot.Text=newroot.ID.ToString().Trim()+"."+ds.Tables[0].Rows[i]["catalogname"].ToString().Trim();
root.Nodes.Add(newroot);
FillTree(newroot,ds1);
  }
}
anewbaba 2005-11-29
  • 打赏
  • 举报
回复
在网上找了很久都没找到答案,所以上这里来问问,希望高手能帮帮忙。谢谢

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧