当前位置:编程学习 > C#/ASP.NET >>

treeview 如何实现类似新建文件夹那样的命名方式

这是我写的递归方法
Private Function AddNewNode(ByVal nodes As TreeNodeCollection, ByVal ConstStr As String) As String
        'Dim tempStr As String = ""
        For i = 0 To nodes.Count - 1
            If nodes(i).Text.Contains(ConstStr) Then  '如果名称存在。。。。
                
                ConstStr = ConstStr.Substring(0, ConstStr.IndexOf("_")) & "_" & ConstStr.Substring(ConstStr.IndexOf("_") + 1, ConstStr.Length - ConstStr.IndexOf("_") - 1) + 1
                AddNewNode(nodes, ConstStr)
                Exit For
            End If
        Next
        Return ConstStr

 End Function

调用方法
'添加节点 
                TreeView1.LabelEdit = True

                AddNode = New TreeNode(AddNewNode(TreeView1.SelectedNode.Nodes, "新房间_1"))
                TreeView1.SelectedNode.Nodes.Add(AddNode)
                TreeView1.ExpandAll()
                AddNode.BeginEdit()

现在的问题是,添加第一个 和 第二个好使 到第三个(新房间_3)时,不知道为什么重复执行好几次AddNewNode(nodes, ConstStr),最后又给我返回的值成了 新房间_2 了,请高手指教 --------------------编程问答-------------------- 不明白你为什么要用递归,根本不用递归的啊
把你的详细需求再说一下 --------------------编程问答-------------------- Private Function AddNewNode(ByVal nodes As TreeNodeCollection, ByVal ConstStr As String) As String
  'Dim tempStr As String = ""
  For i = 0 To nodes.Count - 1
  If nodes(i).Text.Contains(ConstStr) Then '如果名称存在。。。。
   
  ConstStr = ConstStr.Substring(0, ConstStr.IndexOf("_")) & "_" & ConstStr.Substring(ConstStr.IndexOf("_") + 1, ConstStr.Length - ConstStr.IndexOf("_") - 1) + 1
  ConstStr = AddNewNode(nodes, ConstStr)
  Exit For
  End If
  Next
  Return ConstStr

 End Function --------------------编程问答-------------------- +房间信息
  -房间1
  -房间2
  -房间3

是一个树形,我的意思是,treeview右键添加节点时默认给一个“房间1”,添加之前判断默认值是否在节点中存在,如果存在则加1,就好像咱们新建文件夹一样(新建文件夹、新建文件夹(2)),楼上的到是解决了,我不知道采用我这种方法为什么退出for返回值后又回到了AddNewNode(nodes, ConstStr)这行,还有什么更简单的方法没,求解。。。 --------------------编程问答--------------------
引用 3 楼  的回复:
+房间信息
  -房间1
  -房间2
  -房间3

是一个树形,我的意思是,treeview右键添加节点时默认给一个“房间1”,添加之前判断默认值是否在节点中存在,如果存在则加1,就好像咱们新建文件夹一样(新建文件夹、新建文件夹(2)),楼上的到是解决了,我不知道采用我这种方法为什么退出for返回值后又回到了AddNewNode(nodes, ConstStr)这行,还有什么更简单……


那你根本就不应该用递归。
另外,看你的代码,也很不严谨。
如果用户命名时,出现多个“_”,或者没按你默认给的数值那就会出问题。

代码不写了,给你提供思路。
1. 遍历所有node,用“_”做split,检查第一段是否=默认字符串
如果等于,那么将剩余部分强行转为整数(用VAL函数),假设为a
2. 取整个循环里a的最大值,加1,作为新名字的后半部分,假设为b
3. 用默认值前半部分加上b,形成新名字,假设为c
4. 返回c --------------------编程问答-------------------- AddNode = New TreeNode(AddNewNode(TreeView1.SelectedNode.Nodes, "新房间_1"))
你不是只判断了有没有房间1么。。创建房间3的时候也只是从1加到2吧。。 --------------------编程问答-------------------- 上代码给分 --------------------编程问答-------------------- 上代码给分 
补充:.NET技术 ,  VB.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,