遇见春天
这里我们只修改节点的名称,不变动树的节点,同时,我们需要利用之前学习的新增窗体【VBA树控件学习三】新增树TreeView节点,所以我们需要来将之前的窗体与代码做一些调整。
NO.1
调整现有窗体
a.我们先将frmAdd窗体名称修改成:frmTreeView_Edit
b.在frmTreeView_Edit窗体里添加一个产品编号的文本框,名称为ProductID,同时可用修改成否。
NO.2
添加/调整代码
接下来,我们就需要来调整代码了。
a.我们先来修改一下frmTreeView的打开新增按钮的代码
DimobjNodeAsNodeSetobjNode=Me.TreeView0.SelectedItem’选中某个节点strNodeParentKey=objNode.Key’选中的节点为父节点strNodeKey=Null’当前节点为空strNodeText=Null’当前节点名称为空DoCmd.OpenForm”frmTreeView_Edit”,acNormal,,,acFormAdd’打新增窗体
b.在frmTreeView窗体添加一些树控件代码
PrivateSubForm_Open(CancelAsInteger)Me.lblPath.Caption=””EndSubPrivateSubTreeView0_NodeClick(ByValNodeAsObject)’树节点路径Me.lblPath.Caption=”树控件路径:”&Node.FullPathMe.TreeView0.SetFocusEndSubPrivateSubTreeView0_GotFocus()’树控件得到焦点SetMe.TreeView0.DropHighlight=NothingEndSubPrivateSubTreeView0_LostFocus()’树控件失去焦点SetMe.TreeView0.DropHighlight=Me.TreeView0.SelectedItemEndSub
PrivateSubbtnEdit_Click()DimobjNodeAsNodeSetobjNode=Me.TreeView0.SelectedItemIfobjNode.Key=”K”ThenExitSubEndIfstrNodeParentKey=objNode.Parent.KeystrNodeKey=objNode.KeystrNodeText=objNode.TextDoCmd.OpenForm”frmTreeView_Edit”,,,,acFormEdit,acDialogobjNode.Text=strNodeTextCallTreeView0_NodeClick(objNode)EndSub
d.调整一下frmTreeView_Edit的保存与加载事件
‘保存按钮PrivateSubbtnSave_Click()’判断不能为空IfIsNull(Me.ProductName)ThenMsgBox”产品名称不能为空。”,vbExclamationMe.ProductName.SetFocusExitSubEndIfDimrstAsObject’DAO.RecordsetDimstrProductIDAsStringDimstrWhereAsStringDimstrSQLAsString’判断上级键值是否为空IfNotIsNull(Me.ProductParentID)ThenstrWhere=”ProductParentID='”&Me.ProductParentID&”‘”ElsestrWhere=”ProductParentIDisnull”EndIf’取到上级键值的最大值strProductID=Nz(DMax(“ProductID”,”tblProduct”,strWhere),””)’生成编号strProductID=Me!ProductParentID&Format(Val(Right(strProductID,4)) 1,”0000″)’Debug.PrintstrProductIDstrSQL=”select*fromtblProductwhereProductID='”&Me.ProductID&”‘”Setrst=CurrentDb.OpenRecordset(strSQL,2)’打开记录集Ifrst.EOFThenrst.AddNewrst!ProductParentID=Me!ProductParentIDrst!ProductID=strProductIDElserst.EditEndIfrst!ProductName=Me!ProductNamerst.UpdatestrNodeText=Me!ProductNameMsgBox”保存成功。”,vbInformationIfMe.DataEntry=FalseThenDoCmd.CloseacForm,Me.NameElseForm_frmTreeView.Form_Load’树重新加载一下Me.ProductName=NullMe.ProductParentID=Replace(strNodeParentKey,”K”,””)Me.ProductParentID.RowSource=Me.ProductParentID.RowSource’刷新EndIfrst.CloseSetrst=NothingEndSubPrivateSubForm_Load()Me.ProductParentID=Replace(strNodeParentKey,”K”,””)IfMe.DataEntryThenExitSubMe.ProductID=Replace(strNodeKey,”K”,””)Me.ProductName=strNodeTextMe.ProductParentID.Enabled=IsNull(Me.ProductID)EndSub
e.在frmTreeView中添加删除代码
PrivateSubbtnDelete_Click()DimstrMsgAsStringDimobjNodeAsNodeDimstrSQLAsStringDimlngRecordsAffectedAsLongSetobjNode=Me.TreeView0.SelectedItemIfobjNode.Key=”K”ThenExitSubEndIfIfobjNode.Children>0ThenMsgBox”该节点下存在子节点,必须先删除所有子节点。”,vbExclamationExitSubEndIfstrMsg=”确定要删除该节点【”&objNode.Text&”】吗?”IfMsgBox(strMsg,vbExclamation vbOKCancel,”删除提示”)=vbOKThenstrSQL=”DELETEFROMtblProductWHEREProductID='”&Mid(objNode.Key,2)&”‘”CurrentDb.ExecutestrSQLMe.TreeView0.Nodes.RemoveobjNode.KeySetobjNode=Me.TreeView0.SelectedItemCallTreeView0_NodeClick(objNode)EndIfEndSub
f.在通用模块中添加通用变量名
PublicstrNodeParentKeyAsVariantPublicstrNodeKeyAsVariantPublicstrNodeTextAsVariant
NO.3
运行测试
最后,就是运行测试了。
具体的操作,我们会在视频中讲解,请大家期待!
END