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

treeview控件,怎样使用C#TreeView控件

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

今天给各位分享treeview控件的知识,其中也会对怎样使用C#TreeView控件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

treeview控件,怎样使用C#TreeView控件

TreeView控件的属性

DropHighlight属性(ListView, TreeView控件),

Indentation属性,

LabelEdit属性,

LineStyle属性,

Nodes属性,

PathSeparator属性(TreeView控件),

treeview控件,怎样使用C#TreeView控件

SelectedItem属性(ActiveX控件),

Sorted属性(TreeView控件),

Style属性(TreeView控件),

Checkboxes属性,

FullRowSelect属性,

Scroll属性,

treeview控件,怎样使用C#TreeView控件

SingleSel属性,

HotTracking属性,

TabIndex属性,

Tag属性,

Visible属性,

DragIcon属性,

DragMode属性,

CausesValidation属性,

MouseIcon属性,

TabStop属性,

HelpContextID属性,

Name属性,

Parent属性,

Container属性,

ToolTipText属性,

WhatsThisHelpID属性,

OLEDragMode属性(ActiveX控件),

OLEDropMode属性(ActiveX控件),

Height, Width属性(ActiveX控件),

Index属性(ActiveX控件),

Left, Top属性(ActiveX控件),

Object属性(ActiveX控件),

Appearance属性(ActiveX控件),

BorderStyle属性(ActiveX控件),

Enable属性(ActiveX控件),

Font属性(ActiveX控件),

HideSelection属性(ActiveX控件),

hWnd属性(ActiveX控件),

MousePointer属性(ActiveX控件),

ImageList属性(ActiveX控件)。

VB中如何使用TreeView控件.

TreeView控件应用实例:将 TreeView绑定到 Biblio.mdb数据库

应用示例:DataTree.vbp

本章的代码示例是从应用示例 DataTree.vbp which is listed in the Samples directory中得到的。

可将数据库中的数据绑定到 TreeView控件。下面的示例将 TreeView控件绑定到 Biblio数据库,该数据库可以在 Visual Basic CD中找到。该应用实例将 Publishers表作为树节点的第一层。如果一个出版商对应于一个或多个书名,则这些书名将作为该出版商的子节点加入树中。

图 2.42与数据绑定的 TreeVew控件

下面的代码用到了如下对象:

Data Access Object Library(3.5)

名为“frmDataTree”的 Form对象

名为“tvwDB”的 TreeView控件

名为“cmdLoad”的 CommandButton控件

将 Biblio.mdb数据库绑定到 TreeView控件

在工程中添加对数据访问对象(DAO 3.0)的引用。

为 Database和 Node对象创建模块级的变量。

在 Form Load事件中,用 OpenDatabase语句将 Database对象变量设置为 Biblio数据库。

用 Nodes集合的 Add方法创建顶层的节点对象。

在 CommandButton的 Click事件中,创建两个 Recordset变量,并将它们设置为 Publishers和 Titles表。

用“Do Until”语句为表中的每个出版商创建一个 Node对象。

对每个出版商,在 Titles记录集中检查匹配的 PubID字段;为每个匹配项添加一个子节点。

在工程中添加对数据访问对象(DAO 3.5)的引用

要将数据库绑定到 TreeView控件,必须先添加对当前版本的数据访问对象(DAO)的引用。

为 Database对象和 Node对象创建模块级的变量

由于需要在一个会话中多次访问 Biblio.mdb数据库,如果创建一个模块级的 Database对象,保持一个打开数据库,将有助于提高效率。此后,不需要打开数据库即可访问它。在窗体的声明部分,键入如下内容:

Private mDbBiblio As Database

如果希望该数据库还可被其它模块使用,可以用 Public语句,并重命名该变量,以表明它是全局的,例如 gDbBiblio。

在创建 Node对象时,在 Set语句中(如下所示)使用 Node类型的变量。

Dim TempNode As Node

Set TempNode= tvwDB.Nodes.Add()

虽然可以在添加 Node对象时创建变量,更有效的方式是声明一个模块级的 Node对象变量,并用它创建所有的 Node对象。在上述声明部分再键入:

Private mNode As Node

用 OpenDatabase语句将 Database对象变量设置为 Biblio数据库

Form对象的 Load事件中可以初始化 Database变量。代码如下:

Set mDbBiblio= DBEngine.OpenDatabase("BIBLIO.MDB")

在成功地初始化 Database对象变量后,就可以在该模块的代码中的任何位置自由地访问它了。

Form Load事件:用 Nodes集合的 Add方法创建顶层的 Node对象

至此,Database对象变量已经被初始化为 Biblio数据库,现在可以创建树中的第一个节点,并将打开的数据库的名称赋予它。首先必须用 Node集合的 Add方法创建第一个 Node对象。还要使用 Set语句将其赋给 mNode对象变量,如下所示:

Set mNode= tvwDB.Nodes.Add()'创建第一个节点。

mNode.Text= mDbBiblio.Name

注意,在上面的代码中,在创建 Node的同时用 Set语句将其赋给了 mNode对象变量。由于 mNode变量现在包含了新创建的 Node对象,可以对该 Node对象的属性进行赋值。在上述情况下,Database的名称(即 Database对象的 Name属性)已经被赋给了新节点的 Text属性。

CommandButton Click事件:创建两个 Recordset变量,并将它们分别设置为 Publishers和 Titles表

本应用实例假定存在名为“cmdLoad”的按钮,并且当用户单击它时,置入 Biblio数据库中的两个表到 TreeView控件中。为此,必须首先在该按钮的 Click事件中声明两个 DAO对象变量。第一个变量 rsPublishers用来包含 Publishers表。第二个变量 rsTitles用来包含 Titles表。下面的代码声明了这两个变量,并用 OpenRecordSet方法将表赋给变量:

Dim rsPublishers As Recordset

Dim rsTitles As Recordset

Set rsPublishers= mDbBiblio. _

OpenRecordset("Publishers", dbOpenDynaset)

Set rsTitles= mDbBiblio. _

OpenRecordset("titles", dbOpenDynaset)

用 Do Until语句为表中的每个出版商创建一个 Node对象

现在有两个打开的记录集,可以遍历每个记录集,创建 Node对象,并为该对象的 Text属性赋予合适的值。首先,必须遍历 Publishers表,并为该表中的每个出版商创建一个 Node对象。

下列简化了的代码可以用一句话概括为,“逐个处理每个记录,直到记录集的末尾:创建 Node变量,并将 Title字段的值赋给其 Text属性,移到下一记录并重复”:

Do Until rsPublishers.EOF

Set mNode= tvwDB.Nodes.Add(1, tvwChild)

mNode.Text= rsPublishers!Name

rsPublishers.MoveNext

Loop

注意,在上面的 Add方法中用了两个参数。第一个参数(1)是我们希望添加入节点的 Node的 Index属性。也就是说,希望所有的出版商节点成为第一个(根)节点(在 Form的 Load事件中创建的)的子节点。第二个参数使用了常数(tvwChild),该常数指定新的 Node将成为编号为“1”的 Node的子节点。

对每个出版商,在 Titles记录集中检查匹配的 PubID字段;为每个匹配项添加一个子节点

上面的代码将 Publishers表的内容作为第一层填入 TreeView中。然而,我们还希望能够进入更深一层,为每个出版商节点增加子节点。每个子节点代表该出版商印刷的一本书。

为了做到这一点,如果有了对新创建的出版商节点(mNode)的引用,只要遍历 Titles记录集,并检查每条记录的 PubID字段即可。如果该字段与 Publishers记录集中的 PubID字段相匹配,则该书是由当前的出版商出版的。但是,在能够为 mNode添加节点之前,还必须先将 mNode的 Index属性赋给一个变量(intIndex),如下所示:

intIndex= mNode.Index

然后就可以在 Add方法中使用该变量了,Add方法需要用来加入子节点的 Node对象的 Index属性:

Set mNode= tvwDB.Nodes.Add(intIndex, tvwChild)

如下简化的代码可被表述为“直到 Recordset的结尾:创建子 Node对象,并将 Title字段的值赋给它的 Text属性;移动到下一记录并重复上述操作”:

Do Until rsTitles.EOF

If rsPublishers!PubID= rsTitles!PubID Then

Set mNode= tvwDB.Nodes.Add(intIndex, tvwChild)

mNode.Text= rsTitles!Title'Text属性。

End If

Loop

完成代码

上面的代码显示了用两个相关的表填成一个表的基本策略。全部代码如下:

'必须设置对 DAO 3.5的引用。

'在声明部分,声明模块级的对象变量:

Private mDbBiblio As Database

Private mNode As Node

Private Sub Form_Load()

'在 Form_Load事件中,设置对象变量,

'并创建 TreeView控件的第一个 Node对象。

Set mDbBiblio= DBEngine.Workspaces(0). _

OpenDatabase("BIBLIO.MDB")

tvwDB.Sorted= True

Set mNode= tvwDB.Nodes.Add()

mNode.Text="Publishers"

mNode.Tag= mDbBiblio.Name'设置 Tag属性。

mNode.Image="closed"'设置 Image

'属性

End Sub

Private Sub cmdLoad_Click()

'声明 DAO对象变量,

'并将记录集赋予它们。

Dim rsPublishers As Recordset

Dim rsTitles As Recordset

Set rsPublishers= mDbBiblio. _

OpenRecordset("Publishers", dbOpenDynaset)

Set rsTitles= mDbBiblio. _

OpenRecordset("titles", dbOpenDynaset)

'移到第一条记录。

rsPublishers.MoveFirst

Dim intIndex As Integer'用于索引的变量。

'直到最后一条记录(EOF):添加一个 Node对象,

'并用 Name字段作为新

'Node对象的文本。

Do Until rsPublishers.EOF

Set mNode= tvwDB.Nodes.Add(1, tvwChild)

mNode.Text= rsPublishers!Name

mNode.Tag="Publisher"'Tag标识该表。

'为 Key赋予唯一的 ID

mNode.Key= CInt(rsPublishers!PubID)&" ID"

'将变量 intIndex设置为新创建 Node的 Index属性。

'用该变量将子 Node对象加入当前 Node。

intIndex= mNode.Index

'对这条记录,在 Title表中查找与 Titles记录集

'中出现相同 PubID的记录。如果找到这样的记录,

'则在 TreeView控件中加入 Node对象,并将用所

'找到记录的 Title、 ISBN和 Author字段为新

'Node对象的属性赋值。

Do Until rsTitles.EOF

If rsPublishers!PubID= rsTitles!PubID Then

Set mNode= tvwDB.Nodes. _

Add(intIndex, tvwChild)

mNode.Text= rsTitles!Title'文本。

mNode.Key= rsTitles!ISBN'唯一的 ID。

mNode.Tag="Authors"'表名。

mNode.Image="leaf"'图象。

End If

rsTitles.MoveNext'Titles中的下一条记录。

Loop

'将 rsTitles重新设置为 Titles的第一条记录。

rsTitles.MoveFirst

'移动到下一条 Publisher记录。

rsPublishers.MoveNext

Loop

End Sub

增加代码

使用 SQL语句创建较小的“Titles”记录集,可以对这个示例加以改进。下面的代码创建只包含相同 PubID值的记录的记录集:

Set rsTitles= mDbBiblio.OpenRecordset _

("select* from Titles Where PubID="& _

rsPublishers!PubID)

然后该代码就只需对较小的记录集进行循环,因而效率比较高。修改后的代码如下:

Private Sub cmdLoad_Click()

Dim rsPublishers As Recordset

Dim rsTitles As Recordset

Set rsPublishers= mDbBiblio. _

OpenRecordset("Publishers", dbOpenDynaset)

Dim intIndex

Do Until rsPublishers.EOF

Set mNode= tvwDB.Nodes.Add(1, tvwChild)

mNode.Text= rsPublishers!Name

mNode.Tag="Publisher"'标识表。

mNode.Key= rsPublishers!PubID&" ID"

mNode.Image="closed"

intIndex= mNode.Index

'对这条记录,使用查询创建 Title表的记录集,

'查询条件是所有包含相同 PubID的记录。对结果记录集中

'的每一条记录,在 TreeView控件中加入一个 Node对象,

'并用记录的 Title、 ISBN和 Author字段为新

'Node对象的属性赋值。

Set rsTitles= mDbBiblio.OpenRecordset _

("select* from Titles Where PubID="& _

rsPublishers!PubID)

Do Until rsTitles.EOF

Set mNode= tvwDB.Nodes. _

Add(intIndex, tvwChild)

mNode.Text= rsTitles!TITLE'文本。

mNode.Key= rsTitles!ISBN'唯一的 ID。

mNode.Tag="Authors"'表名。

mNode.Image="smlBook"'图象。

'移动到 rsTitles中的下一个记录。

rsTitles.MoveNext

Loop

'移动到下一个 Publishers记录。

rsPublishers.MoveNext

Loop

End Sub

怎样使用C#TreeView控件

1

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

2

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

3

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

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

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

输出日志信息的文本框。

4

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

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

5

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

6

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

7

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

8

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

9

生成exe文件进行测试

10

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

11

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

12

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

13

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

14

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

15

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

16

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

关于treeview控件的内容到此结束,希望对大家有所帮助。

南昌网站推广,南昌网站优化服务比较好公司有哪家淘宝购物车代码,淘宝购物车代码(简化购物流程,提升用户体验)