首页编程treeview(怎样使用C#TreeView控件)

treeview(怎样使用C#TreeView控件)

编程之家2023-11-02116次浏览

亲爱的读者们,你是否对treeview和怎样使用C#TreeView控件的相关问题感到困惑?别担心,今天我将为你解答这些问题,让你对此有更清晰的认识。

treeview(怎样使用C#TreeView控件)

怎样使用C#TreeView控件

1

打开Microsoft Visual Studio 2010,新建名字为【treeView】的程序。

2

在界面上添加【treeView】的控件,并调整为合适大小。

3

在程序界面上加入其它需要的控件:包括,

treeview(怎样使用C#TreeView控件)

用于输入父节点个数和子节点个数的2个输入框;

生成节点的按钮、删除节点的按钮、清除所有节点的按钮;

输出日志信息的文本框。

4

编辑代码,输入【生成节点】的代码;

获取子节点和父节点的个数,使用循环添加父节点和子节点。

treeview(怎样使用C#TreeView控件)

5

编辑【清除所有节点】的代码。

6

编辑【删除所选节点】的代码。

7

点击【treeview】控件,在属性中选择行为,从行为列表中选择【afterselect】双击,在代码编辑页面,添加节点被选择后的代码。

8

编辑输出日志的output方法的代码。

9

生成exe文件进行测试

10

输入父节点和子节点数量分别为2和4,生成树结构。确认生成成功。

11

点击【清除所有节点】,可以看到所有节点都已经被清空。

12

输入父节点和子节点数量分别为3和3,生成树结构。确认生成成功。

13

点击【父节点3】的【子节点2】,点击【删除节点】。

14

可以看到该子节点已经被清空。再点击【父节点2】。

15

点击【删除节点】,可以看到该父节点已经被清空。

16

点击各个节点时,可以看到日志中输入对应的节点信息。

C#中TreeView组件使用方法

TreeView组件是由多个类来定义的,TreeView组件是由命名空间"System.Windows.Forms"中的"TreeView"类来定义的,而其中的节点(即Node),是由命名空间"System.Windows.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组件的常用方法和一般方法基本都介绍完了。

三. C#编写的一个完整操作TreeView组件的例子:

下面是C#编写一个的关于TreeView组件的例子,在这个例子中,结合以上介绍的常用方法和一般方法,基本覆盖来TreeView组件的一些最常用的操作。譬如可以灵活的程序中的TreeView组件中,进行加入子节点、兄弟节点、删除节点、折叠、展开等操作。其中前三种基本操作是通过程序中弹出菜单中的功能来实现的,后面操作是通过程序中的按钮来实现的。下面是此程序的代码节略(TreeView.cs):

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

namespace全面掌握TreeView组件的使用方法

{

/// Form1的摘要说明。

public class Form1: Form

{

private TreeView treeView1;

private Button button1;

private Button button2;

private Button button3;

private MenuItem menuItem2;

private MenuItem menuItem3;

private MenuItem menuItem4;

private ContextMenu contextMenu1;

private TextBox textBox1;

private Label label1;

///必需的设计器变量。

private System.ComponentModel.Container components= null;

public Form1()

{

//初始化窗体中的组件

InitializeComponent();

}

///清理所有正在使用的资源。

protected override void Dispose( bool disposing)

{

if( disposing)

{

if( components!= null)

{

components.Dispose();

}

}

base.Dispose( disposing);

}

private void InitializeComponent()

{

//初始化代码(略)

}

[ STAThread ]

static void Main()

{

Application.Run( new Form1());

}

private void AddChildNode()

{

//首先判断是否选定组件中的位置

if( treeView1.SelectedNode== null)

{

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

}

else

{

if( textBox1.Text!="")

{

//创建一个节点对象,并初始化

TreeNode tmp;

tmp= new TreeNode( textBox1.Text);

//在TreeView组件中加入子节点

treeView1.SelectedNode.Nodes.Add( tmp);

treeView1.SelectedNode= tmp;

treeView1.ExpandAll();

}

else

{

MessageBox.Show("TextBox组件必须填入节点名称!","提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);

return;

}

}

}

private void AddParent()

{

//首先判断是否选定组件中节点的位置

if( treeView1.SelectedNode== null)

{

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

}

else

{

if( textBox1.Text!="")

{

//创建一个节点对象,并初始化

TreeNode tmp;

tmp= new TreeNode( textBox1.Text);

//在TreeView组件中加入兄弟节点

treeView1.SelectedNode.Parent.Nodes.Add( tmp);

treeView1.ExpandAll();

}

else

{

MessageBox.Show("TextBox组件必须填入节点名称!","提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);

return;

}

}

TreeNode tnode= new TreeNode( textBox1.Text);

}

private void treeView1_MouseDown( object sender, MouseEventArgs e)

{

if( e.Button== MouseButtons.Right)

contextMenu1.Show( this, new Point( e.X, e.Y));

}

private void button1_Click( object sender, System.EventArgs e)

{

treeView1.SelectedNode.Expand();

}

private void menuItem2_Click( object sender, System.EventArgs e)

{

AddChildNode();

}

private void menuItem3_Click( object sender, System.EventArgs e)

{

AddParent();

}

private void menuItem4_Click( object sender, System.EventArgs e)

{

//判断选定的节点是否存在下一级节点

if( treeView1.SelectedNode.Nodes.Count== 0)

//删除节点

treeView1.SelectedNode.Remove();

else

MessageBox.Show("请先删除此节点中的子节点!","提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

private void button2_Click( object sender, System.EventArgs e)

{

//定位根节点

treeView1.SelectedNode= treeView1.Nodes [ 0 ];

//展开组件中的所有节点

treeView1.SelectedNode.ExpandAll();

}

private void button3_Click( object sender, System.EventArgs e)

{

//定位根节点

treeView1.SelectedNode= treeView1.Nodes [ 0 ];

//折叠组件中所有节点

treeView1.SelectedNode.Collapse();

}

}

}

在成功编译TreeView.cs后,运行的程序界面如下:

四.总结:

TreeView组件是一个既令程序员头痛,又令程序员难以割舍的组件。这是因为TreeView组件使用非常灵活,显示内容有层次,并且"容量"相对又比较大。但同时在实际的编程比起其他组件又相对麻烦。掌握了本文介绍的这些用C#操作TreeView组件的基本方法后,我想对于在使用TreeView组件中的一般的问题,应该都能够克服了吧。

C# winform treeview

你好:

数据库中的字段为三个字段就够用:分别为id,name,parentid(存储对应的父级id)

我写了两个函数,你把参数传进去就可以了:

功能函数:

#region InitNode

///<summary>

///初始化节点

///</summary>

///<param name="dt">要加载成树结构的数据源</param>

private void InitNode(DataTable dt)

{

DataRow[] drRoot= dt.Select("id='0'");

if(drRoot!= null&& drRoot.Length> 0)

{

TreeNode root= new TreeNode();

root.Text= drRoot[0]["name"].ToString();

root.Tag= drRoot[0];

this.treeView1.Nodes.Add(root);

this.BuildChild(drRoot[0], root, dt);

}

}

#endregion

#region BuildChild

///<summary>

///加载子节点

///</summary>

///<param name="dr">父节点对应的行</param>

///<param name="root">父节点</param>

///<param name="dt">要加载成树结构的数据源</param>

private void BuildChild(DataRow dr, TreeNode root,DataTable dt)

{

if(dr== null|| root== null) return;

DataRow[] drChilds= dt.Select("parentid='"+ dr["id"]+"'");

if(drChilds!= null|| drChilds.Length> 0)

{

foreach(DataRow drChild in drChilds)

{

TreeNode node= new TreeNode();

node.Text= drChild["name"].ToString();

node.Tag= dr;

root.Nodes.Add(node);

this.BuildChild(drChild, node, dt);

}

}

}

#endregion

函数调用:

this.InitNode(this.GetData());

测试数据源:

#region GetData

///<summary>

///测试数据源

///</summary>

private DataTable GetData()

{

DataTable dt= new DataTable();

dt.Columns.Add("id");

dt.Columns.Add("name");

dt.Columns.Add("parentid");

dt.Rows.Add(new object[]{"0","中国南方集团有限公司","root"});

dt.Rows.Add(new object[]{"1","集团办办公室","0"});

dt.Rows.Add(new object[]{"2","人力资源部","0"});

dt.Rows.Add(new object[]{"3","市场部","0"});

dt.Rows.Add(new object[]{"301","市场部1","3"});

dt.Rows.Add(new object[]{"302","市场部2","3"});

dt.Rows.Add(new object[]{"4","B公司","0"});

dt.Rows.Add(new object[]{"401","销售部","4"});

dt.Rows.Add(new object[]{"402","质管部","4"});

dt.Rows.Add(new object[]{"5","D公司","0"});

dt.Rows.Add(new object[]{"6","A公司","0"});

dt.Rows.Add(new object[]{"7","C公司","0"});

dt.Rows.Add(new object[]{"8","网络信息中心","0"});

return dt;

}

#endregion

好了,关于treeview和怎样使用C#TreeView控件的问题到这里结束啦,希望可以解决您的问题哈!

百度新闻源 百度新闻源是怎么发上去的要钱吗免费做网站 如何免费做网站