【VBA树控件学习四】编辑与删除TreeView节点

遇见春天

HI,我是默默等你来点赞的edon,大家最近忙吗?

今天,我们接着来讲一下TreeView树控件。之前,我们已经把新增节点的功能讲完了,接下来我们来讲一下编辑功能与删除功能。

这里我们只修改节点的名称,不变动树的节点,同时,我们需要利用之前学习的新增窗体,所以我们需要来将之前的窗体与代码做一些调整。

1、调整现有窗体

a.我们先将frmAdd窗体名称修改成frmTreeView_Edit

b.在frmTreeView_Edit窗体里添加一个产品编号的文本框,名称为ProductID,同时可用修改成否。

c.在frmTreeView添加两个按钮控件,一个用于打开编辑窗体,名称为:btnEdit,一个用于删除节点:btnDelete,最后在树控件的旁边再添加一个标签控件,用于显示选中树节点的路径。

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

3、运行测试

最后,就是运行测试了。

END

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易登软件Access开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值