kxing 发表于 2012-12-12 02:56:24

[已解决]求助递归创建treeviewitem的问题

本帖最后由 kxing 于 2012-12-12 21:35 编辑

我希望写一个递归函数按照以下次序创建分类。
比如新浪是个大类,里面包含新闻、女性、科技等三个同等级的子分类。
其次,新闻里面在包含:新闻要闻、国内要闻两个相同等级的项目。
女性、科技也和新闻相同……
当然,子分类的层数是无法确定的。
只要在class字段下就为一级分类。

小弟比较笨,望哪位高人指点,不胜感激!

新浪=新浪
军事频道=http://

[新浪]
新闻=新闻
女性=女性
科技=科技
卡通频道=http://

[新闻]
国际频道=http://
国内频道=http://

[女性]
减肥频道=http://
美容频道=http://

[科技]
数码频道=http://
手机频道=http://

kxing 发表于 2012-12-12 03:04:32

目前做出来后总是一层包含一层,没办法做到同等级的键值创建同等级的分类。

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

netegg 发表于 2012-12-12 03:14:44

没具体东西怎么帮你,说是很容易,无非是循环套循环,不过具体怎么写要看实际东西了

kxing 发表于 2012-12-12 03:19:28

复制上述ini,运行代码即可。
只要上述ini能读取正确就ok啦。
不过,套循环应该是没用的,因为子分类层数不确定,只能递归。

netegg 发表于 2012-12-12 03:51:53

本帖最后由 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 11:07:05

本帖最后由 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

kxing 发表于 2012-12-12 21:35:32

回复 6# afan

嘿嘿,写糊涂了。只差一句。
感谢afan和蛋兄了!!!

afan 发表于 2012-12-12 21:36:55

回复afan

嘿嘿,写糊涂了。只差一句。
感谢afan和蛋兄了!!!
kxing 发表于 2012-12-12 21:35 http://www.autoitx.com/images/common/back.gif


    又错了,是两句: 19, 20

kxing 发表于 2012-12-13 21:23:43

我晕,两句,也是一个参数...
页: [1]
查看完整版本: [已解决]求助递归创建treeviewitem的问题