[已解决]求助递归创建treeviewitem的问题
本帖最后由 kxing 于 2012-12-12 21:35 编辑我希望写一个递归函数按照以下次序创建分类。
比如新浪是个大类,里面包含新闻、女性、科技等三个同等级的子分类。
其次,新闻里面在包含:新闻要闻、国内要闻两个相同等级的项目。
女性、科技也和新闻相同……
当然,子分类的层数是无法确定的。
只要在class字段下就为一级分类。
小弟比较笨,望哪位高人指点,不胜感激!
新浪=新浪
军事频道=http://
[新浪]
新闻=新闻
女性=女性
科技=科技
卡通频道=http://
[新闻]
国际频道=http://
国内频道=http://
[女性]
减肥频道=http://
美容频道=http://
[科技]
数码频道=http://
手机频道=http://
目前做出来后总是一层包含一层,没办法做到同等级的键值创建同等级的分类。
guicreate("treeview",300,300)
$htv=guictrlcreatetreeview(0,0,300,300)
guisetstate()
readinfo("data.ini",$htv)
do
sleep(10)
until guigetmsg()=-3
func readinfo($ini,$htv,$csname="class",$hClass=0)
if not $hClass then $hClass=$htv
$aSec=inireadsection($ini,$csname)
if @error then return false
for $i=1 to $aSec
$child=inireadsection($ini,$aSec[$i])
if @error then;频道
$hItem=guictrlcreatetreeviewitem($aSec[$i],$hClass)
else;子类
$hClass=guictrlcreatetreeviewitem($aSec[$i],$hClass)
readinfo($ini,$htv,$aSec[$i],$hClass)
endif;频道或分类
next
return true
endfunc;readinfo
没具体东西怎么帮你,说是很容易,无非是循环套循环,不过具体怎么写要看实际东西了 复制上述ini,运行代码即可。
只要上述ini能读取正确就ok啦。
不过,套循环应该是没用的,因为子分类层数不确定,只能递归。 本帖最后由 netegg 于 2012-12-12 06:29 编辑
回复 4# kxing
_iniread('class')
Func _iniread($i)
$item = IniReadSection('1.ini', $i)
For $i = 1 To UBound($item) -1
; ConsoleWrite($item[$i] & @CR)
If StringInStr($item[$i], 'http') Then
ConsoleWrite($item[$i] &'************'&$item[$i] &'***********' & @CR)
Else
ConsoleWrite($item[$i] & '++++++++++++++++++++++++'&$item[$i] & @CR)
_iniread($item[$i])
EndIf
Next
EndFunc ;==>_iniread
写了个大概思路,结果有问题,不过大体就是这样了 本帖最后由 afan 于 2012-12-12 18:48 编辑
自己写的思路还犯错… 改一下递归的参数即可GUICreate("treeview", 300, 300)
$htv = GUICtrlCreateTreeView(0, 0, 300, 300)
GUISetState()
readinfo("data.ini", $htv)
Do
Sleep(10)
Until GUIGetMsg() = -3
Func readinfo($ini, $htv, $csname = "class", $hClass = 0)
If Not $hClass Then $hClass = $htv
$aSec = IniReadSection($ini, $csname)
If @error Then Return False
For $i = 1 To $aSec
$child = IniReadSection($ini, $aSec[$i])
If @error Then;频道
$hItem = GUICtrlCreateTreeViewItem($aSec[$i], $hClass)
Else;子类
$hClass1 = GUICtrlCreateTreeViewItem($aSec[$i], $hClass)
readinfo($ini, $hClass, $aSec[$i], $hClass1)
EndIf;频道或分类
Next
Return True
EndFunc ;==>readinfo 回复 6# afan
嘿嘿,写糊涂了。只差一句。
感谢afan和蛋兄了!!! 回复afan
嘿嘿,写糊涂了。只差一句。
感谢afan和蛋兄了!!!
kxing 发表于 2012-12-12 21:35 http://www.autoitx.com/images/common/back.gif
又错了,是两句: 19, 20 我晕,两句,也是一个参数...
页:
[1]