信息发布软件,b2b软件,广告发布软件

标题: vb.net中TreeView各种方法调用您总有一种方法喜欢吧 [打印本页]

作者: 信息发布软件    时间: 2017-5-15 23:48
标题: vb.net中TreeView各种方法调用您总有一种方法喜欢吧
本帖最后由 信息发布软件 于 2017-5-15 23:57 编辑

在中,TreeView(树型结构)控件是显示节点(Node)对象的级层结构,它通常用于显示一些有等级结构的信息,我们最为熟悉的就是Windows资源管理器左边显示文件和文件夹的窗口。在工具箱中,TreeView 控件的图标如下图一所示:

   vb.net中TreeView各种方法调用您总有一种方法喜欢吧 b2b软件

  TreeView控件的每个节点(Node对象)包含了一个标签和可选的点位图,每个节点又可能包含有若干个的子节点,可以通过控制某个节点来展开显示或者折叠隐藏它所包含的子节点。

  一、TreeView 控件的一些常用属性:

  1、CheckBoxes 属性:指示是否在树视图控件中的树节点旁显示复选框。

  2、FullRowSelect 属性:当 FullRowSelect 为 true 时,选择突出显示将跨越树视图的整个宽度,即整个显示区域的宽度而不仅仅是树节点标签的宽度。如果 ShowLines 设置为 true,则将忽略 FullRowSelect 属性。

  3、HideSelection 属性:指示选定的树节点是否即使在树视图已失去焦点时仍会保持突出显示。

  4、HotTracking 属性:如果 HotTracking 属性设置为 true,那么当鼠标指针移过每个树节点标签时,树节点标签都将具有超级链接的外观。Underline 字体样式将应用于 Font 而 ForeColor 将设置为蓝色,从而使标签显示为链接。注意:如果 CheckBoxes 属性设置为 true,HotTracking 属性将失效。

  5、Indent 属性:设置每个子树节点级别的缩进距离(以像素为单位)。

  6、ItemHeight 属性:设置树视图控件中每个树节点的高度。

  7、Nodes 属性:获取分配给树视图控件的树节点集合。这个属性是TreeView 控件最重要的属性之一,我们下文将会对它进行更加的详细的说明。

  8、PathSeparator 属性:树节点路径(TreeNode.FullPath 属性)所使用的分隔符串,默认为反斜杠字符 (\),树节点路径包括一组由 PathSeparator 分隔符串分隔的树节点标签。标签的范围为根树节点到所需的树节点。如下代码我们可以获得当前选中的节点的路径:

  MessageBox.Show(TreeView1.SelectedNode.FullPath)

  9、SelectedNode 属性:获取或设置当前在树视图控件中选定的树节点,如果没有选定任何节点,则 SelectedNode 属性则为Nothing。

  10、ShowLines 属性:指示是否在树视图控件中的树节点之间绘制连线。

  11、ShowPlusMinus 属性:指示是否在包含子树节点的树节点旁显示加号 (+) 和减号 (-) 按钮。

  12、ShowRootLines 属性:指示是否在树视图根处的树节点之间绘制连线。

  如下图二所示,为ShowLines 属性、ShowPlusMinus 属性、ShowRootLines 属性都设置为True的情形:

   vb.net中TreeView各种方法调用您总有一种方法喜欢吧 b2b软件

  二、为TreeView 控件添加节点

  TreeView 控件的 Nodes 属性包含了它所有的节点,下面我们就来了解如何为树状控件添加节点

  1、通过树节点编辑器添加

  选中TreeView 控件,在它的属性对话框中找到Nodes 属性,然后单击它后面的省略号,弹出“树节点编辑器”,如下图三所示:

   vb.net中TreeView各种方法调用您总有一种方法喜欢吧 b2b软件

  然后通过编辑器上的“添加根”来添加根节点,通过“添加子级”来为选中的节点添加子节点,通过“删除”来删除选定的节点,“标签”输入框确定节点的名称,注意,只有设置了TreeView 控件的ImageList 属性才能选择设置节点的图像。


  2、通过编程方式添加节点

  给TreeView添加结点用到的是“Nodes.Add”方法,首先选定要添加子结点的结点才能应用这个方法。

  TreeView中的结点的组织关系是父结点管理子结点的关系,也就是说,子结点组成的集合就是父结点的“Nodes”属性,子结点的“Index”属性,是根据其在子结点集合中的位置而决定的,而不是整棵树中结点的位置。根据这个特点,若想找到指定结点须按以下的语法:

  TreeViewName.Nodes.Item(Index1).Nodes

  而添加结点的方法为:

  TreeViewName.Nodes.Item(Index1).Nodes.Add("NodeText")

  TreeViewName.Nodes.Item(Index1).Nodes.Add("objNode")

  如下代码所示为选中的节点添加一个子节点:

  TreeView1.SelectedNode.Nodes.Add("www")

  3、编程删除节点

  使用Nodes属性的Remove 方法删除单个节点,也可以使用Clear 方法清除所有的节点,如下代码所示:

  '删除选定的节点

  TreeView1.Nodes.Remove(TreeView1.SelectedNode)

  '清除TreeView 控件的所有节点

  TreeView1.Nodes.Clear()

  4、示例演示

  我们现在用一个实例来看如何使用Nodes属性来实现代码编程添加删除树形控件的节点。首先为设计如下图四所示的程序界面,其中有四个Button 控件,一个TreeView 控件:

   vb.net中TreeView各种方法调用您总有一种方法喜欢吧 b2b软件

  为“添加根节点”按钮添加如下代码:

  TreeView1.Nodes.Add("根节点" & (TreeView1.GetNodeCount(False) + 1))

  注意:GetNodeCount方法为获得本级别的节点数,可以通过参数False来指定不包括它的子节点

  为“添加子节点”按钮添加如下代码:

  Dim node As TreeNode = TreeView1.SelectedNode

  If Not node Is Nothing Then

  node.Nodes.Add("子节点" & (node.GetNodeCount(False) + 1))

  Else

  MessageBox.Show("没有选中任何节点")

  End If

  注意:TreeNode.GetNodeCount 方法返回的是分配给 Nodes 集合的子树节点的数目。

  为“删除单个节点”按钮添加代码:

  Dim node As TreeNode = TreeView1.SelectedNode

  If node Is Nothing Then

  MessageBox.Show("没有选中任何节点")

  Else

  TreeView1.Nodes.Remove(node)

  End If

  为“删除所有节点”按钮添加代码:

  TreeView1.Nodes.Clear()

  代码添加完毕后,运行程序,分别使用“添加根节点”、“添加子节点”为控件添加节点,如下图五所示:

   vb.net中TreeView各种方法调用您总有一种方法喜欢吧 b2b软件

  然后再试验删除节点的效果。

  三、访问控件的所有节点

  因为Nodes集合中所包含的只是本级节点的集合,如果某个Node包含有子节点,并不会从当前的Nodes体现出来,如下代码所示,我们只能访问到所有的根节点而不是所有的节点。

  假定我们是在前面示例的基础上添加一个名为“遍历节点”的按钮,然后在该按钮的Click事件中添加如下代码:

  Dim node As TreeNode

  Dim str As String = ""

  For Each node In TreeView1.Nodes

  str = str & node.Text & vbCr

  Next

  MessageBox.Show(str)

  node = Nothing

  运行后,先分别为控件添加若干个根节点与子节点,然后单击“遍历节点”按钮,效果如下图六所示:

   vb.net中TreeView各种方法调用您总有一种方法喜欢吧 b2b软件

  很明显,我们遍历了Nodes集合,但是并没有如期访问到子节点,怎么解决这个问题呢?请看下一页。

  如上页的问题,我们假设一个根节点的Nodes集合为Nodes1,该集合中的一个Node节点为Node2,Node2下有若干个子节点,我们把它的子节点的集合称为Nodes2,我们用For Each 遍历Nodes1时,它访问到Node2,但不会访问Nodes2集合。

  如果我们要访问Nodes2,就需要像遍历Nodes1一样遍历Nodes2,解决办法如下:

  首先,建立一个过程用于遍历一个Node节点下的子节点:

  Private Sub PrintNode(ByVal N As TreeNode)

  Debug.WriteLine(N.Text)

  Dim node As TreeNode

  For Each node In N.Nodes

  PrintNode(node)

  Next

  End Sub

  然后把“遍历节点”的Click事件中修改为如下代码:

  Dim node As TreeNode

  For Each node In TreeView1.Nodes

  PrintNode(node)

  Next

  node = Nothing

  运行后,先分别为控件添加若干个根节点与子节点,然后单击“遍历节点”按钮,然后查看“输出”窗口,效果如下图七所示:

   vb.net中TreeView各种方法调用您总有一种方法喜欢吧 b2b软件

  可以发现已经能真正地遍历了所有节点。

  本文主要是了解TreeView 控件的一些主要属性,着重于掌握Nodes属性的性质和使用。请你继续关注我们巧巧读书网的相关文章连载,我们一起去探索编程世界。



一个TreeView(树型结构)控件是显示结点(Node)对象的等级体系结构,每个Node对象包含了一个标签和可选的点位图。TreeView控件通常用于显示文档头、索引中的条目、磁盘上的文件和目录或者可以显示为等级结构的各种其他信息。Windows资源管理器左侧部分就是一个典型的树结构。TreeView控件在工具箱中的图标如图所示: vb.net中TreeView各种方法调用您总有一种方法喜欢吧 b2b软件

1.TreeView在设计时设计好结点的组织结构
要建立如下图所示的树形结构可按以下步骤进行:

vb.net中TreeView各种方法调用您总有一种方法喜欢吧 b2b软件

(1)向窗体添加一个TreeView控件,名为TreeView1以及一个ImageList控件,名为ImageList1;
(2)在ImageList控件中添加位图文件,具体方法见后面的ImageList控件章节。
(3)将TreeView属性页中的“ImageList”选项设置为“ImageList1”;
(4)点击TreeView属性页中的“Nodes”选项,则会弹出树结点编辑对话框
(5)在树结点编辑框中编辑结点的层次关系
2.在树结点编辑器中编辑结点
(1)点击“Add Root(添加根结点)”按钮,则在结点编辑框中出现了一个结点(默认名为NodeN),可根据树型的需要,将其他结点添加到这棵树上。
(2)选择需要添加子结点的结点,单击“Add Child(添加子结点)”按钮,则在当前选中的结点中的结点上添加了一个子结点。
(3)选择需要添加位图的结点,然后在“Image”(图标)、“Selected Image“(选择图标)中,在ImageList1中选择需要的位图即可。
(4)点击“OK(确定)”按钮,在TreeView1中就会显示编辑的树了。
3.运行时给树添加结点
给TreeView添加结点用到的是“Nodes.Add”方法,首先选定要添加子结点的结点才能应用这个方法,TreeView中的结点的组织关系是父结点管理子结点的关系,也就是说,子结点组成的集合就是父结点的“Nodes”属性,子结点的“Index”属性,是根据其在子结点集合中的位置而决定的,而不是整棵树中结点的位置。根据这个特点,若想找到指定结点须按以下的语法:
TreeViewName.Nodes.Item(Index1).Nodes.Item(Index2)...
而添加结点的方法为:
TreeViewName.Nodes.Item(Index1).Nodes.Item(Index2)….Add("NodeText")

TreeViewName.Nodes.Item(Index1).Nodes.Item(Index2)….Add("objNode")
例如在上面TreeView1的node2结点中添加子结点“node2child1”,再给结点node2child1添加子结点“node2child1child1”,可以写成如下代码:

Protected Sub Button1_Click(Byval sender As Object,ByVal e As system.Eventargs)     Dim nodx As New TreeNode()     nodx.Text="node2child1"     nodx.ImageIndex=2     TreeView1.Nodes.Item(2).Nodes.Add(nodx)     TreeView1.Nodes.Item(2).Nodes.Item(0).Nodes.Add("node2child1child1")End Sub


Treeview是由节点TreeNode组成的,第一级的称之为根节点TreeRoot,在根节点之下一级的称之为某个根节点的子节点TreeLeaf,某个子节点之下一级的子节点就称为该子节点的子节点。第个节点有两个标识方式,一个是它的Text,即显示出来的内容;另一个是它的Tag属性,一般用唯一标识码对其进行标识,以用于在使用时对节点的识别。在本文中,也主要用Text属性来显示节点的名称字段,用Tag属性来显示节点的编号属性。(节点编号被设为主键,也就是唯一的标识了)

  1.加载根节点

  好了,我们该开始在VB.NET中进行演练了!第一步,当然是看看怎么在窗体起始的时候加载根节点:

'定义公用变量   
Dim myconnection As New OleDb.OleDbConnection()   
Dim MyAdapater As New OleDb.OleDbDataAdapter()   
Dim mycommand As New OleDb.OleDbCommand()   
Dim ds As New DataSet()   
  
Private Sub Form1_Load(ByVal sender As System.Object,  
ByVal e As System.EventArgs) Handles MyBase.Load   
'载入根节点表至treeview中,作为第一级   
myconnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;  
Data Source=" & Application.StartupPath & "\project.mdb"     
'数据库连接请自行更换   
mycommand.CommandText = "SELECT 根节点编号,根节点名称 FROM 根节点"   
mycommand.Connection = myconnection   
Try   
myconnection.Close()   
myconnection.Open()   
Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader   
TreeView1.Nodes.Clear()   
While mysqlreader.Read()   
Dim tree_root As New TreeNode()   
tree_root.Tag = mysqlreader.GetString(0)   
'把编号放入tag中   
tree_root.Text = mysqlreader.GetString(1)   
'树上显示的是根节点名称   
'请根据你数据库字段的类型来决定是否用getstring或其它类型   
TreeView1.Nodes.Add(tree_root)   
End While   
Catch ex As Exception   
MessageBox.Show(ex.ToString, "数据表根节点载入错误", vbOKOnly)   
Finally   
myconnection.Close()   
End Try   
TreeView1.ExpandAll()   
TreeView1.Select()   
End Sub

  2.点击时加入子节点

  对TreeView的点击,对于TreeView控件本身,并没有为哪一个级别的Node编写点击(选择)事件处理程序,而是把所有节点的点击事件都写入了一个AfterSelect事件中。因此,在编写点击加入子节点的程序之前,我们还必须编写一个查找点击的节点是哪一级节点的方法。

Public Function NodeLevel(ByVal n As TreeNode) As Byte   
'* 找出树中当前节点的级数   
Dim i As Byte = 1   
Dim m As String   
Do Until n.Parent Is Nothing   
nn = n.Parent   
i += 1   
Loop   
Return i   
End Function

  通过这个函数,就可以很方便地得到节点的级别。现在我们可以放心地编写节点选择事件处理程序,以实现动态加载各级节点的子节点。

Private Sub TreeView1_AfterSelect(ByVal sender As System.Object,  
ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect   
Select Case NodeLevel(e.Node).ToString   
Case "1"   
If e.Node.GetNodeCount(False) = 0 Then   
mycommand.CommandText = "select 第一级子节点编号,第一级子节点名称  
from 第一级子节点 where 根节点编号 ='" & e.Node.Tag & "'"   
fill_treeleaf()   
End If   
Case "2"   
If e.Node.GetNodeCount(False) = 0 Then   
mycommand.CommandText = "select 第二级子节点编号,第二级子节点名称  
from 第二级子节点 where 第一级子节点编号 ='" & e.Node.Tag & "'"   
fill_treeleaf()   
End If   
End Select   
End Sub   

Public Sub fill_treeleaf()   
mycommand.Connection = myconnection   
Try   
myconnection.Open()   
Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader   
While mysqlreader.Read()   
Dim tree_leaf As New TreeNode()   
tree_leaf.Tag = mysqlreader.GetString(0)   
tree_leaf.Text = mysqlreader.GetString(1)   
TreeView1.SelectedNode.Nodes.Add(tree_leaf)   
End While   
Catch ex As Exception   
MsgBox(ex.Message)   
Finally   
myconnection.Close()   
End Try   
End Sub




作者: huangge    时间: 2017-5-16 15:55
这次合作,整个过程很顺利,今后我的店铺还是会请你帮我装修,希望越来越好
作者: cjagl520    时间: 2017-5-19 01:16
卖家,技术过硬,服务过好,就像巴黎欧莱雅,你值得拥有
作者: 发财猪    时间: 2017-5-19 02:02
卖家真心话~~~
作者: 都敏俊系    时间: 2017-5-20 11:36
确认晚了,一直在忙着建设,客服和技术,包括帮我搭建的人都非常棒,非常耐心,以后肯定还会有很多问题,希望能再帮我解决,后台速度很快,第三方后台这家是让我满意的。
作者: 脱颖而出    时间: 2017-5-21 12:32
蛋和27号技术服务真的很好,超赞,以后还找她们做网站
作者: wbd902    时间: 2017-5-21 14:20
很好,性价比很高,整体感觉不错,非常满意。
作者: 都敏俊系    时间: 2017-5-23 10:10
处理速度非常快下次一定再代你真心谢谢你
作者: 西充    时间: 2017-6-6 21:49
服务耐心
作者: jingtai001    时间: 2017-6-14 14:18
,服务好,技术牛逼




欢迎光临 信息发布软件,b2b软件,广告发布软件 (http://www.postbbs.com/) Powered by Discuz! X3.2