vba怎样添加treeview(编辑与删除TreeView节点)
vba怎样添加treeview(编辑与删除TreeView节点)c.在frmTreeView添加两个按钮控件,一个用于打开编辑窗体,名称为:btnEdit,一个用于删除节点:btnDelete,最后在树控件的旁边再添加一个标签控件,用于显示选中树节点的路径。b.在frmTreeView_Edit窗体里添加一个产品编号的文本框,名称为ProductID,同时可用修改成否。NO.1调整现有窗体a.我们先将frmAdd窗体名称修改成frmTreeView_Edit
遇见春天
HI,我是默默等你来点赞的edon,大家最近忙吗?
今天,我们接着来讲一下TreeView树控件。之前,我们已经把新增节点的功能讲完了,接下来我们来讲一下编辑功能与删除功能。
这里我们只修改节点的名称,不变动树的节点,同时,我们需要利用之前学习的新增窗体,所以我们需要来将之前的窗体与代码做一些调整。
NO.1
调整现有窗体
a.我们先将frmAdd窗体名称修改成frmTreeView_Edit
b.在frmTreeView_Edit窗体里添加一个产品编号的文本框,名称为ProductID,同时可用修改成否。
c.在frmTreeView添加两个按钮控件,一个用于打开编辑窗体,名称为:btnEdit,一个用于删除节点:btnDelete,最后在树控件的旁边再添加一个标签控件,用于显示选中树节点的路径。
NO.2
添加/调整代码
接下来,我们就需要来调整代码了。
a.我们先来修改一下frmTreeView的打开新增按钮的代码
Dim objNode As Node
Set objNode = Me.TreeView0.SelectedItem '选中某个节点
strNodeParentKey = objNode.Key '选中的节点为父节点
strNodeKey = Null '当前节点为空
strNodeText = Null '当前节点名称为空
DoCmd.OpenForm "frmTreeView_Edit" acNormal acFormAdd '打新增窗体
b.在frmTreeView窗体添加一些树控件代码
Private Sub Form_Open(Cancel As Integer)
Me.lblPath.Caption = ""
End Sub
Private Sub TreeView0_NodeClick(ByVal Node As Object) '树节点路径
Me.lblPath.Caption = "树控件路径:" & Node.FullPath
Me.TreeView0.SetFocus
End Sub
Private Sub TreeView0_GotFocus() '树控件得到焦点
Set Me.TreeView0.DropHighlight = Nothing
End Sub
Private Sub TreeView0_LostFocus() '树控件失去焦点
Set Me.TreeView0.DropHighlight = Me.TreeView0.SelectedItem
End Sub
c.在frmTreeView添加打开编辑的代码
Private Sub btnEdit_Click()
Dim objNode As Node
Set objNode = Me.TreeView0.SelectedItem
If objNode.Key = "K" Then
Exit Sub
End If
strNodeParentKey = objNode.Parent.Key
strNodeKey = objNode.Key
strNodeText = objNode.Text
DoCmd.OpenForm "frmTreeView_Edit" acFormEdit acDialog
objNode.Text = strNodeText
Call TreeView0_NodeClick(objNode)
End Sub
d.调整一下frmTreeView_Edit的保存与加载事件
'保存按钮
Private Sub btnSave_Click()
'判断不能为空
If IsNull(Me.ProductName) Then
MsgBox "产品名称不能为空。" vbExclamation
Me.ProductName.SetFocus
Exit Sub
End If
Dim rst As Object ' DAO.Recordset
Dim strProductID As String
Dim strWhere As String
Dim strSQL As String
'判断上级键值是否为空
If Not IsNull(Me.ProductParentID) Then
strWhere = "ProductParentID='" & Me.ProductParentID & "'"
Else
strWhere = "ProductParentID is null"
End If
'取到上级键值的最大值
strProductID = Nz(DMax("ProductID" "tblProduct" strWhere) "")
'生成编号
strProductID = Me!ProductParentID & Format(Val(Right(strProductID 4)) 1 "0000")
' Debug.Print strProductID
strSQL = "select * from tblProduct where ProductID='" & Me.ProductID & "'"
Set rst = CurrentDb.OpenRecordset(strSQL 2) '打开记录集
If rst.EOF Then
rst.AddNew
rst!ProductParentID = Me!ProductParentID
rst!ProductID = strProductID
Else
rst.Edit
End If
rst!ProductName = Me!ProductName
rst.Update
strNodeText = Me!ProductName
MsgBox "保存成功。" vbInformation
If Me.DataEntry = False Then
DoCmd.Close acForm Me.Name
Else
Form_frmTreeView.Form_Load '树重新加载一下
Me.ProductName = Null
Me.ProductParentID = Replace(strNodeParentKey "K" "")
Me.ProductParentID.RowSource = Me.ProductParentID.RowSource '刷新
End If
rst.Close
Set rst = Nothing
End Sub
Private Sub Form_Load()
Me.ProductParentID = Replace(strNodeParentKey "K" "")
If Me.DataEntry Then Exit Sub
Me.ProductID = Replace(strNodeKey "K" "")
Me.ProductName = strNodeText
Me.ProductParentID.Enabled = IsNull(Me.ProductID)
End Sub
e.在frmTreeView中添加删除代码
Private Sub btnDelete_Click()
Dim strMsg As String
Dim objNode As Node
Dim strSQL As String
Dim lngRecordsAffected As Long
Set objNode = Me.TreeView0.SelectedItem
If objNode.Key = "K" Then
Exit Sub
End If
If objNode.Children > 0 Then
MsgBox "该节点下存在子节点,必须先删除所有子节点。" vbExclamation
Exit Sub
End If
strMsg = "确定要删除该节点【" & objNode.Text & "】吗?"
If MsgBox(strMsg vbExclamation vbOKCancel "删除提示") = vbOK Then
strSQL = "DELETE FROM tblProduct WHERE ProductID='" & Mid(objNode.Key 2) & "'"
CurrentDb.Execute strSQL
Me.TreeView0.Nodes.Remove objNode.Key
Set objNode = Me.TreeView0.SelectedItem
Call TreeView0_NodeClick(objNode)
End If
End Sub
f.在通用模块中添加通用变量名
Public strNodeParentKey As Variant
Public strNodeKey As Variant
Public strNodeText As Variant
NO.3
运行测试
最后,就是运行测试了。
END