Private Function Findnode(ByVal treelist As TreeNodeCollection) If treelist Is Nothing Then Return "" End If Dim nodex As TreeNode For Each nodex In treelist If nodex.Text = citystr Then nodex.EnsureVisible() nodex.Checked = True Else Findnode(nodex.Nodes) End If Next End Function 做了一小下改动 我也是用递归的 只是不知道怎么让节点一个个的展开 现在能展开节点了 只是没有办法把焦点定位到搜索的条目上去不过算了 这样也可以了 谢谢楼上的老兄
Private Function Findnode(ByVal treelist As TreeNodeCollection) If treelist Is Nothing Then Return "" End If Dim nodex As TreeNode For Each nodex In treelist If nodex.Text = citystr Then nodex.EnsureVisible() nodex.Checked = True Me.DreamsTView1.SelectedNode = nodex Me.DreamsTView1.Focus() Else Findnode(nodex.Nodes) End If Next End Function此为最终更改后的VB代码 当搜索到最后一级的时候能够定位到目标的焦点上 但是上级就不行了,只能展开到相应的目录,不过这样已经很好了 谢谢大家的支持,算是功能实现了
不过你说的结果是一样的
是为了搜索整个树,把焦点定位到搜索的目标上
不过不是用XML
我用的从数据库里读取数据,存入datatable里面,
然后再从table 里取出一条条的数据加入到树的节点上希望有人来帮忙
private void Findnode(TreeNode tn)
{
if(tn.Nodes == null) return; foreach(TreeNode t in tn.Nodes)
if(t.Text == "你要找的节点")
t.EnsureVisible();
else
Findnode(t);
}树的根节点调用函数,找到后自然会展开到那里
If treelist Is Nothing Then
Return ""
End If
Dim nodex As TreeNode
For Each nodex In treelist
If nodex.Text = citystr Then
nodex.EnsureVisible()
nodex.Checked = True
Else
Findnode(nodex.Nodes)
End If
Next
End Function
做了一小下改动
我也是用递归的
只是不知道怎么让节点一个个的展开
现在能展开节点了
只是没有办法把焦点定位到搜索的条目上去不过算了
这样也可以了
谢谢楼上的老兄
参考一下这个
mycnn=new OleDbConnection(@"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=f:\dazhu2.mdb");
mycnn.Open();
if(mycnn.State==System.Data.ConnectionState.Open)
{
MessageBox.Show(" 数据库连接成功 !");
OleDbDataAdapter mya=new OleDbDataAdapter("select * from t1 order by m_id,t_id,[order]",mycnn);
DataSet mydataset=new DataSet();
mya.Fill(mydataset,"one");//填充数据 DataTable mytable=mydataset.Tables[0];
//向TREEVIEW 中填充数据
TreeNode newnode=null;
foreach(DataRow r in mytable.Rows)
{
data1 mydata;
newnode=new TreeNode();
newnode.Text=r[4].ToString();
mydata.id=int.Parse(r[0].ToString());
mydata.m_id=int.Parse(r[1].ToString());
mydata.t_id=r[2].ToString(); //在tag中存放相关信息
newnode.Tag=(object)mydata;
if(int.Parse(r[1].ToString())==1)
{
this.treeView1.Nodes.Add(newnode);
}
else
{
TreeNode node1=null;
int i=int.Parse(r[2].ToString());
foreach(TreeNode nd in this.treeView1.Nodes)
{
//递归的方法
node1=find_node(nd,i);
if(node1!=null)
{
this.treeView1.SelectedNode=node1;
this.treeView1.Focus();
//add node
this.treeView1.SelectedNode.Nodes.Add(newnode);
break; }
}
if(node1==null)
{
MessageBox.Show("未找到相应的结点");
}
} }
}
else
MessageBox.Show(" 数据库连接失败 !");
} //递归的方法
private TreeNode find_node(TreeNode a,int b)
{
TreeNode findnode=null; //取出节点tag中的数据
object o=a.Tag;
data1 mydata=(data1)o;
string m=mydata.id.ToString();
string n=b.ToString(); if(m==n)
{
findnode=a;
}
else
{
foreach(TreeNode nd in a.Nodes)
{
findnode=find_node(nd,b);
if(findnode!=null)
{
break;
}
} }
//返回找到的结点
return findnode;
}
我先COPY下来研究一会
谢谢大家了其实不我是我非要用VB的
我自己本身有C#
所以跑到C#这里发文章
是我要做改动的这个软件以前是用VB写的
所以没有办法晚上下班之前回来结贴
If treelist Is Nothing Then
Return ""
End If
Dim nodex As TreeNode
For Each nodex In treelist
If nodex.Text = citystr Then
nodex.EnsureVisible()
nodex.Checked = True
Me.DreamsTView1.SelectedNode = nodex
Me.DreamsTView1.Focus()
Else
Findnode(nodex.Nodes)
End If
Next
End Function此为最终更改后的VB代码
当搜索到最后一级的时候能够定位到目标的焦点上
但是上级就不行了,只能展开到相应的目录,不过这样已经很好了
谢谢大家的支持,算是功能实现了