Virtual Developer Workshop: Containerized Development with Docker
This does require Sheridan Controls for the .Level property of the node in the Sheridan TreeView Control. You should be able to replicate this with the standard treeview control, but you will have to come up with a different way to find out which menu to popup for the user. On a very deep tree this becomes quite complex if you are not using the Sheridan Controls. Which is why I am. I am too lazy to go into that much detail. I didn't even do it for the program that uses this. Go ahead and populate the tvw anyway you like and add these three events.
The popAddNewNode_Click() occurs from the right Click event of the node in the tvw. The code is well commented (at least compared to my usual commenting style), so if you have any questions or want a sample program of how this works if you are having problems with this email me: firstname.lastname@example.org
private Sub popAddNewNode_Click() Dim tParent as string sstvwCode.SelectedItem.Expanded = false ' get parent node of new node to add tParent = sstvwCode.SelectedItem.Key ' Add temporary node and let user enter name for it set tNode = sstvwCode.Nodes.Add(tParent, ssatChild) ' Make sure node is selected so wrong node is not ' removed AfterLabelEdit tNode.Selected = true sstvwCode.StartLabelEdit End Sub private Sub sstvwCode_AfterLabelEdit _ (Cancel as SSActiveTreeView.SSReturnBoolean, _ NewString as string) on error GoTo AddNodeError Dim nParent as string Dim nText as string ' Only proceed if user typed in new name If NewString <> "" then ' get the parent of the temp node, because it ' is about to be deleted nParent = tNode.Parent.Key nText = NewString ' Remove the temp node that the user just ' typed in sstvwCode.Nodes.Remove _ sstvwCode.SelectedItem.Index ' Add the new node in same position ' with complete information set tNode = sstvwCode.Nodes.Add(nParent, _ ssatChild, nText, nText) ' Update the treeview sstvwCode.Refresh else ' This is the message box if user does not ' enter a name for item MsgBox "You must label the new item", 48, _ "new item not saved" 'remove the no-named item sstvwCode.Nodes.Remove tNode.Index End If ' Destroy object set tNode = nothing Exit Sub AddNodeError: Dim iResult% Select Case Err.Number ' error occurs if name of node already exists Case "35602": iResult = MsgBox("An item with that name _ already exists", , _ "Cannot save new item") ' A more complete error handler truly needs to be ' implemented here but this is a Simple demo program, ' There are alot of error that can occur with the treeview. Case else: set tNode = nothing Exit Sub End Select set tNode = nothing End Sub private Sub sstvwCode_MouseUp(Button as Integer, _ Shift as Integer, x as Single, y as Single) If Button = vbRightButton then 'use the level property to avoid having error ' message 'if you try to use SelectedItem.Parent.Text(or something ' along those lines) 'it will generate an error that will not resume or ' error trap If sstvwCode.SelectedItem.Level = 1 Or _ sstvwCode.SelectedItem.Level = 2 then me.PopupMenu popTest else Exit Sub End If End If End Sub