2015-02-09 61 views
1

我想在选择它时从树中删除一个节点。 当我选择一个节点时,我的代码将它从树中移除。到现在为止还挺好。但是,然后选择传递到下一个节点,所以我的代码也将其删除。并继续前进,直到所有节点都消失。 我曾尝试使用.nodemouseclick而不是.afterselect,但那不工作正确:如果我选择一个节点,然后另一个节点,它将删除第一个节点。删除选定节点会删除所有treenodes?

Private Sub tree_Selected_RemoveNode(sender As Object, e As TreeViewEventArgs) Handles tree_Selected.AfterSelect 
    Dim ActiveNode As TreeNode 
    ActiveNode = tree_Selected.SelectedNode 
    If Not ActiveNode Is Nothing Then 
       tree_Selected.Nodes.Remove(ActiveNode) 
    End If 
End Sub 
+0

你还没有制定出你的逻辑,你正在使用AfterSelect事件,所以当你删除一个节点后,TreeView会找到另一个节点来创建活动节点,这会让你的代码再次运行。目前还不清楚你想要只删除一个节点的逻辑。当用户选择节点时,节点通常不应该消失。也许一个带有删除菜单项的右键菜单将是一个更好的选择。 – LarsTech 2015-02-09 15:10:46

+0

我有两个树视图,其中一个用户可以选择多个节点(我在这里作弊并将每个节点设置为显示为使用颜色选择),但他们也可以通过再次单击来取消选择节点。第二个treeview只有一个在第一个视图中显示的项目列表。所以我希望用户能够点击第二个视图中的一个项目并使其从该视图中消失。 – DovesandChicks 2015-02-10 16:31:00

回答

1

这是一个有点不清楚你正在尝试与用户界面这里做,而是一种方法,以避免所有节点的消失将去除AfterSelect处理程序并将其添加回你的代码完成时:

Try 
    RemoveHandler tree_Selected.AfterSelect, AddressOf tree_Selected_AfterSelect 
    Dim ActiveNode As TreeNode 
    ActiveNode = tree_Selected.SelectedNode 
    If Not ActiveNode Is Nothing Then 
    tree_Selected.Nodes.Remove(ActiveNode) 
    End If 
Catch ex As Exception 
    MessageBox.Show(ex.ToString, "Error") 
Finally 
    AddHandler tree_Selected.AfterSelect, AddressOf tree_Selected_AfterSelect 
End Try 
+0

谢谢你,完美的作品 – DovesandChicks 2015-05-26 16:41:15