C#中treeview的使用方法有哪些?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中treeview的使用方法有哪些?相关的知识,希望对你有一定的参考价值。

我现在正在利用C#语言开发一个手机资源管理器,需要从手机中导出相关的文件到一个treeview控件中显示出来,折腾了好几天也没弄出来,请问一下那位大虾能解答此问题,给我讲解一下,或给我一些代码,小弟叩谢了!!

TreeView组件是由多个类来定义的,TreeView组件是由命名空间"System.视窗系统.Forms"中的"TreeView"类来定义的,而其中的节点(即Node),是由命名空间"System.视窗系统.Forms"中的"TreeNode"来定义的。所以当在程式中创建一个TreeView对象,其实只是创建了一个能放置节点的"容器"。而在这个容器中加入一个节点,其实就是加入了从"TreeNode"类中创建的一个节点对象;同样删除一个节点,也就是删除一个"TreeNode"节点对象。

一. 本文中介绍的程式设计及运行环境

(1).微软视窗2000 服务器版

(2)..Net Framework SDK 正式版

二. C#操作TreeView组件中的一些常用方法及具体实现:

TreeView组件虽然是个操作起来比较麻烦的组件,但归根到底,能总结为三种基本操作:加入子节点、加入兄弟节点和删除节点。掌控了这三种常用操作,对于在编程中灵活运用TreeView组件是十分必要的。下面就分别来加以介绍。

(1).加入子节点:

所谓子节点,就是处于选定节点的下一级节点。加入子节点的具体过程是:首先要在TreeView组件中定位要加入的子节点的位置,然后创建一个节点对象,然后利用TreeVeiw类中对节点的加入方法(即:Add ( )方法),加入此节点对象。下面就是在treeView1组件中加入一个子节点的具体代码:

//首先判断是否选定组件中的位置
if ( treeView1.SelectedNode == null )

MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

else

//创建一个节点对象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( "节点名称" ) ;
//在TreeView组件中加入子节点
treeView1.SelectedNode.Nodes.Add ( tmp ) ;
treeView1.SelectedNode = tmp ;
treeView1.ExpandAll ( ) ;


(2).加入兄弟节点:

所谓兄弟节点,就是在选定的节点的平级的节点。加入兄弟节点的方法和加入子节点的方法基本一致,只是在最后的实现方法上有着略微的差别。加入兄弟节点的具体步骤,首先也是要确定要加入的兄弟节点所处的位置,接着定义一个节点对象,最后调用TreeView类中对兄弟节点加入的方法,加入此节点对象。加入兄弟节点和加入子节点的最大差别就在于这最后一步。希望读者能够注意。下面是在TreeView组件加入一个兄弟节点的具体代码:

//首先判断是否选定组件中节点的位置
if ( treeView1.SelectedNode == null )

MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

else

//创建一个节点对象,并初始化
TreeNode tmp ;
tmp = new TreeNode ( textBox1.Text ) ;
//在TreeView组件中加入兄弟节点
treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;
treeView1.ExpandAll ( ) ;


(3).删除节点:

删除节点就是删除TreeView组件中选定的节点,删除节点能是子节点,也能是兄弟节点,但无论节点的性质怎么,必须确保要删除的节点没有下一级节点,否则必须先删除此节点中的所有下一级节点,然后再删除此节点。删除节点比起上面的二个操作要显得略微简单,具体方法是:首先判断要删除的节点是否存在下一级节点,如果不存在,就调用TreeView类中的Remove ( )方法,就能删除节点了。下面是删除TreeView组件中节点的具体代码:

//判断选定的节点是否存在下一级节点
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//删除节点
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

(4).TreeView组件的一些其他常用操作:

其他的一些常用操作比起上面的三种操作,在具体实现上要显得简单许多。这些常用操作无非是,展开所有节点,展开指定的节点、和折叠所有节点。下面就来具体介绍一下:

< I > .展开所有节点:

要展开TreeView组件中的所有节点,首先就要把选定的节点指针定位在TreeView组件的根节点上,然后调用选定组件的ExpandAll方法就能了,下面是具体代码:

//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展开组件中的所有节点
treeView1.SelectedNode.ExpandAll ( ) ;

< II > .展开选定节点的下一级节点:

由于只是展开下一级节点,所以就没有必要用ExpandAll ( )方法了。展开下一级节点只需要调用Expand ( )方法就能了,下面是具体的实现代码:

treeView1.SelectedNode.Expand ( ) ;

< III > .折叠所有节点:

折叠所有节点和展开所有节点是一组互操作,具体实现的思路也大致相同,折叠所有节点也是首先要把选定的节点指针定位在根节点上,然后调用选定组件的Collapse ( )就能了,下面是具体的实现代码:

//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//折叠组件中所有节点
treeView1.SelectedNode.Collapse ( ) ;

至此已把在C#操作TreeView组件的常用方法和一般方法基本都介绍
北航嵌入式培训
参考技术A 你要导出的文件是一个集合还是什么?
关于treeview的话,你需要先定义一个treeview对象,然后给它的一级标签循环指定值,然后在它的循环里面在循环将子标签的值也给指定。然后将treeview对象与循环的值绑定就可以了。
参考技术B 给你一个简单的树构造语句
treeView1.Nodes.Add("根节点");
for (int i = 0; i < 5; i++)

treeView1.Nodes[0].Nodes.Add("一级目录"+i.ToString());

for (int i = 0; i < treeView1.Nodes[0].Nodes.Count; i++)

for (int j = 0; j < 5; j++)

treeView1.Nodes[0].Nodes[i].Nodes.Add("二级目录" + j.ToString());


另外节点的tag属性里面还可以存放值,比如ID什么的本回答被提问者采纳

c#、winform、treeview 部分节点加图片

【部门表】是存放在MS SQL SERVER 中,数据结构中的字段有“部门编号”、“部门名”、“父节点编号”分别表示“dpid"、、“dpname”、“dppid”,用树形treeview控件展示出来,用递归的方法邦定数据:(方法 BindTreeView() 放在页面初始加载时 或 放在刷新按钮上 )
//邦定treeview
public void BindTreeView()

sqlconn.GetConn().Open();//打开数据库连接

#region //初始化treeview信息
this.treeView1.Nodes.Clear();
TreeNode root = new TreeNode("Nexscien 部门列表");//添加根节点
root.Tag = 0;

root.NodeFont = new Font("宋体", 15, FontStyle.Underline);
this.treeView1.ItemHeight = 30;
this.treeView1.Nodes.Add(root);
#endregion
SqlDataAdapter sqldap = new SqlDataAdapter(msl.tvpid(), sqlconn.GetConn());
DataSet ds = new DataSet();
sqldap.Fill(ds);
DataView dv = ds.Tables[0].DefaultView;

foreach (DataRowView row in dv)

string name = row["dpname"].ToString().Trim();
int id = Convert.ToInt32(row["dpid"].ToString().Trim());
TreeNode tn = new TreeNode(name);
tn.Tag = row["dpid"].ToString();//记录部门ID

tn.NodeFont = new Font("宋体", 13, FontStyle.Underline);
TV_Addchildnodes(tn, id);
this.treeView1.Nodes.Add(tn);

sqlconn.GetConn().Close();


//子节点递归循环
public void TV_Addchildnodes(TreeNode node, int nodeID)

SqlDataAdapter sqldap = new SqlDataAdapter(msl.tvcid(nodeID), sqlconn.GetConn());
DataSet ds = new DataSet();
sqldap.Fill(ds);
DataView dv = ds.Tables[0].DefaultView;

foreach (DataRowView row in dv)

string name = row["dpname"].ToString().Trim();
int id = Convert.ToInt32(row["dpid"].ToString().Trim());
TreeNode tn = new TreeNode(name);
tn.Tag = row["dpid"].ToString();

tn.NodeFont = new Font("宋体", 11, FontStyle.Underline);
TV_Addchildnodes(tn, id);
node.Nodes.Add(tn);
//tn.Expand();



【员工表】数据结构中的字段有“员工编号”、“员工姓名”、“部门编号”、“父节点编号”分别表示“pid”、“pname”、“dpid”、“dppid”。
【部门表】和【员工表】在程序中的逻辑关系是先添加部门才能添加员工并对该员工分配部门。
问:在treeview 控件加载邦定部门表时,无论父节点、子节点,判断每一个节点如果有员工存在则让该节点添加图片,这一功能如何实现 ????

参考技术A 这个你要配合另一个控件来使用,ImageList这个控件,是图片的集合,然后就能引用了追问

怎么配合,你配合一下呗,完整点

追答

就是imagelist这个控件有一个属性,是引用图片的集合

然后

之后添加就能添加图片了,之后再treeview 的

属性引用之后就可以了

追问

这样做只是其中一步吧,还需要添加个SQL判断语句呢,这样才能让它实现有员工的节点用指定的图标,没员工的用另一指定图标

追答

对啊,这就是添加图片的思想啊,其他的你就根据你的程序自己编啊,那样才有乐趣啊

参考技术B 我记得treeview有个属性是可以加图片的,你好好找找看

以上是关于C#中treeview的使用方法有哪些?的主要内容,如果未能解决你的问题,请参考以下文章

C# TreeView

c#、winform、treeview 部分节点加图片

在编辑节点 (C#) 时为 TreeView 提交更改很热?

在 C# winforms 应用程序中使用文本框过滤 Treeview

C#中按钮点击后,treeview控件怎么选中指定节点?

C# treeView 是不是有代码可以将子节点安排为其父节点的最后一个子节点