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)这行,还有什么更简单的方法没,求解。。。 --------------------编程问答--------------------
那你根本就不应该用递归。
另外,看你的代码,也很不严谨。
如果用户命名时,出现多个“_”,或者没按你默认给的数值那就会出问题。
代码不写了,给你提供思路。
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