扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
你说的“树形菜单”是指下拉菜单(可以有子菜单)吗?如果是,VB.net提供了MenuStrip控件,在工具箱里能找到,直接就在对应位置打字就可以了,完全是“所见即所得”。
创新互联主营屏山网站建设的网络公司,主营网站建设方案,成都app开发,屏山h5小程序开发搭建,屏山网站营销推广欢迎屏山等地区企业咨询
Nodes 集合包含分配给 TreeView 控件的所有 TreeNode 对象。此集合中的树节点称作根树节点。随后添加到根树节点上的任何树节点称作子节点。由于每个 TreeNode 都可以包含其他 TreeNode 对象的集合,您可能会在循环访问集合时觉得很难确定自己在树结构中的位置。您可以使用 PathSeparator 字符串值来分析 TreeNode.FullPath 字符串,以确定 TreeNode 标签的起始和终止位置。
可以在树节点旁显示图像,方法是将一个 ImageList 分配给 ImageList 属性,然后通过引用 Image 在 ImageList 中的索引值来分配该 Image。使用下面的属性分配图像:
将 ImageIndex 属性设置为当树节点未选定时所显示的 Image 的索引值。
将 SelectedImageIndex 属性设置为当树节点被选定时要显示的 Image 的索引值。
ImageIndex 和 SelectedImageIndex 属性值所引用的图像是所有分配给 Nodes 集合的树节点显示的默认图像。每个树节点都可以通过设置 TreeNode.ImageIndex 和 TreeNode.SelectedImageIndex 属性来取代默认的图像。
树节点可以展开,以显示下一级子树节点。用户可以在 TreeNode 旁显示加号 (+) 按钮时通过单击加号 (+) 按钮来展开 TreeNode,或者可以通过调用 TreeNode.Expand 方法来展开 TreeNode。若要展开 Nodes 集合中的所有子树节点级别,请调用 ExpandAll 方法。若要折叠子 TreeNode 级别,可以调用 TreeNode.Collapse 方法,也可以在 TreeNode 旁显示减号 (-) 按钮时按减号 (-) 按钮。还可以通过调用 TreeNode.Toggle 方法在展开和折叠状态之间切换。
树节点可以选择性地显示复选框。若要显示复选框,请将 TreeView 的 CheckBoxes 属性设置为 true。对于处于选中状态的树节点,Checked 属性设置为 true。
注意
从 BeforeCheck 或 AfterCheck 事件内设置 TreeNode.Checked 属性将导致该事件被多次引发并可能产生意外行为。例如,您可以在递归更新子节点时在事件处理程序中设置 Checked 属性,以便用户不必逐个展开并选中每个节点。如果未将 TreeViewEventArgs 的 Action 属性设置为 TreeViewAction.Unknown,则若要防止该事件被多次引发,需为仅执行递归代码的事件处理程序添加逻辑。有关如何进行此操作的示例,请参见 AfterCheck 或 BeforeCheck 事件的示例部分。
通过设置 TreeView 控件的一些显示和样式属性,可以更改此控件的外观。如果将 ShowPlusMinus 设置为 true,则会分别在每个可展开或折叠的 TreeNode 旁显示加号或减号按钮。如果将 ShowRootLines 属性设置为 true,TreeView 则会显示联接所有根树节点之间的连线。通过将 ShowLines 属性设置为 true,可以显示子树节点与其根节点之间的连线。如果将 HotTracking 属性设置为 true,那么当鼠标指针移过树节点标签时,树节点标签的外观将发生变化。如果启用热跟踪,树节点标签将具有超链接的外观。也可以完全自定义 TreeView 控件的外观。若要执行此操作,请将 DrawMode 属性设置为 TreeViewDrawMode.Normal 以外的值并处理 DrawNode 事件。
注意
在运行时设置 CheckBoxes、Scrollable、ImageIndex 和 SelectedImageIndex 属性时,将重新创建 TreeView 句柄(请参见 Control.RecreateHandle)以更新控件的外观。这将折叠除选定的 TreeNode 之外的所有树节点。
下面的代码示例阐释了如何使用 TreeView 控件。
Private Sub InitializeTreeView()
treeView1.BeginUpdate()
treeView1.Nodes.Add("Parent")
treeView1.Nodes(0).Nodes.Add("Child 1")
treeView1.Nodes(0).Nodes.Add("Child 2")
treeView1.Nodes(0).Nodes(1).Nodes.Add("Grandchild")
treeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Great Grandchild")
treeView1.EndUpdate()
End Sub
From MSDN
TreeView 中要使用图片,一般和 ImageList 控件结合.
如下图:
附件中包含了Form8 及所要用的Access数据库db8.mdb
重要的程序有:
1、Form_Load() 中设置数据控件Data 及给TreeView 加载数据:
Private Sub Form_Load()
Dim snRes As DAO.Recordset
Dim N As Node
dataName = App.Path + "\db8.mdb"
With fData
.DatabaseName = dataName
.Connect = "Access"
.RecordSource = "SELECT * FROM T3011 ORDER BY F0,F1 "
.Refresh
End With
DoEvents
Set snRes = fData.Database.OpenRecordset("SELECT F1,F2 FROM T301 WHERE F1'CMPY'", dbOpenSnapshot)
TreeLB.Nodes.Clear
Set N = TreeLB.Nodes.Add(, , "R", "分店资料", "ImgR")
Do While Not snRes.EOF
Set N = TreeLB.Nodes.Add("R", tvwChild, "I_" + Trim(snRes(0)), Trim(snRes(1)), "ImgS")
snRes.MoveNext
Loop
TreeLB.Nodes(1).Expanded = True
End Sub
2、当点击TreeView 时系统找到对应的“分店营业员”资料给Data控件显示:
Private Sub TreeLB_NodeClick(ByVal Node As MSComctlLib.Node)
On Error GoTo NodeClickErr
Dim MySQL$
If InStr(Node.Key, "R") 0 Then
fData.RecordSource = "SELECT * FROM T3011 ORDER BY F1"
fData.Refresh
DoEvents
Exit Sub
ElseIf InStr(Node.Key, "I_") 0 Then
fData.RecordSource = "SELECT * FROM T3011 WHERE F0='" + Trim(Mid$(Trim(Node.Key), InStr(Node.Key, "I_") + 2)) + "' ORDER BY F1"
fData.Refresh
DoEvents
Exit Sub
ElseIf InStr(Node.Key, "C_") 0 Then
MySQL$ = "F0='" + Mid$(Node.Key, 1, InStr(Node.Key, "C_") - 1) + "' "
MySQL$ = MySQL$ + "AND F1='" + Trim(Mid$(Trim(Node.Key), InStr(Node.Key, "C_") + 2)) + "' "
fData.Recordset.FindFirst MySQL$
DoEvents
End If
Exit Sub
NodeClickErr:
MsgBox "记录下面错误信息:" + Chr(13) + Error$, 48, "重要提示"
Err = 0
Exit Sub
End Sub
详细资料下载后运行并研究....
给你一段我曾经写的代码,主要是生成TreeView的节点!有什么不懂的地方你就提!
Public Sub InitializeTreeView(ByVal strvXL As TreeView, ByVal vrsRecordTwo As DataSet)
Dim treBaseNodeOne As TreeNode
Dim treBaseNodeTwo As TreeNode
Dim strDWDM As String
m_rsRecordTwo = g_clsSybase.SelectSC_PD_SBCSB1()
'查找供电局信息
g_clsSybase.SelectRS_ZZJG_ZZJGDMB(m_rsRecordOne)
'添加根节点
Do While m_rsRecordOne.Read
strDWDM = m_rsRecordOne.GetString(0) '获取单位代码
treBaseNodeOne = New TreeNode
treBaseNodeOne.Text = m_rsRecordOne.GetString(1).Trim() '获取单位名称
treBaseNodeOne.Name = m_rsRecordOne.GetString(1)
treBaseNodeOne.Tag = ""
strvXL.Nodes.Add(treBaseNodeOne)
'添加树结构第二层
Dim drsTwo() As DataRow
drsTwo = m_rsRecordTwo.Tables(0).Select("SSDW='" strDWDM "' and SC__XLBM is null")
For Each dr As DataRow In drsTwo
treBaseNodeTwo = New TreeNode
treBaseNodeTwo.Text = dr.Item("XLMC").ToString.Trim
treBaseNodeTwo.Name = dr.Item("XLMC")
treBaseNodeTwo.Tag = dr.Item("XLBM")
treBaseNodeOne.Nodes.Add(treBaseNodeTwo)
Next
Loop
m_rsRecordOne.Close()
End Sub
For i = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(i).Expanded = True
Next i
Dim Reg As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser 'HKEY_CURRENT_USER
Reg.OpenSubKey("\1\2\3\4\5\6\7", True) '在HKEY_CURRENT_USER下新建1\2\3\4\5\6\7的项
希望能对你有所启发和帮助。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流