treeview控件实用详解(treeview获取当前点击的节点)

遇见春天

treeview控件实用详解(treeview获取当前点击的节点)

这里我们只修改节点的名称,不变动树的节点,同时,我们需要利用之前学习的新增窗体【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

发表评论

登录后才能评论