blue_dvd 发表于 2012-11-10 00:43:09

ListView关于返回值问题?[已解决]

本帖最后由 blue_dvd 于 2012-11-10 20:15 编辑

今天发现一个问题?#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

GUICreate("ListView Click Item", 400, 300)
$hListView = GUICtrlCreateListView("", 2, 2, 394, 268, "", $LVS_EX_FULLROWSELECT+$LVS_EX_CHECKBOXES)
      _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 200)
      _GUICtrlListView_InsertColumn($hListView, 0, "Column 2", 150)

GUISetState()

Local $LV_Item, $CheckNum = 0

For $i = 1 To 20
      _ArrayAdd($LV_Item, GUICtrlCreateListViewItem("Row "&$i&": Col 1", $hListView))
                MsgBox(0,"读取$LV_Item",$LV_Item[$i])
Next
$LV_Item = UBound($LV_Item)-1

        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
运行值从4开始,为什么呢?

改一下#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

GUICreate("ListView Click Item", 400, 300)
$hListView = GUICtrlCreateListView("", 2, 2, 394, 268, "", $LVS_EX_FULLROWSELECT+$LVS_EX_CHECKBOXES)
      _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 200)
      _GUICtrlListView_InsertColumn($hListView, 0, "Column 2", 150)

GUISetState()

Local $LV_Item, $CheckNum = 0

For $i = 1 To 20
       _ArrayAdd($LV_Item, _GUICtrlListView_AddItem($hListView, "Row "&$i&": Col 1",$i))
      MsgBox(0,"读取$LV_Item",$LV_Item[$i])
Next
$LV_Item = UBound($LV_Item)-1

        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
值却是0开始
GUICtrlCreateListViewItem() 可以返回控件Id,_GUICtrlListView_AddItem()应该返回不了ID,那有没有专门的函数读取其ID呢?
懂的赐教一下!谢谢了!
3楼annybody正解!

netegg 发表于 2012-11-10 07:39:50

没明白什么意思

annybaby 发表于 2012-11-10 11:01:06

回复 1# blue_dvd

楼主,代码是你自己写的吗??有运行过吗?
第一段代码运行值不是5!
是4

原因是:用户创建的控件ID是从由正数3开始的正整数表示,前面的代码
$hListView = GUICtrlCreateListView("", 2, 2, 394, 268, "", $LVS_EX_FULLROWSELECT+$LVS_EX_CHECKBOXES)
已经创建了一个控件,所以它的ID号是3(也就是,变量$hListView的值是3),后面的当然是4,5,6,7,8,9.....啦

第二段代码,值是从0开始的,很明显啦,看下
_GUICtrlListView_AddItem()的帮助文档可以知道,它返回的是索引,第一个项目的索引当然是0!
要操作它也是通过索引,所以不必专门函数读取ID~~

netegg 发表于 2012-11-10 13:51:08

listviewitem本来就是从0开始算的

netegg 发表于 2012-11-10 13:51:19

本帖最后由 netegg 于 2012-11-10 13:54 编辑

另外,基本函数创建的控件是按创建顺序的依次计算的,是所有控件的顺序,不是单独的算listviewitem
udf是在句柄hlistview里单独计算的,从0开始

blue_dvd 发表于 2012-11-10 20:00:05

本帖最后由 blue_dvd 于 2012-11-10 20:03 编辑

回复 3# annybaby
感觉你才是高手,比较重细节,netegg太厉害了,可能很难理解我这种新手的问题!
运行值是4,所以GUICtrlCreateListView() 第一个返回值应该是4,接下来是5,6......!
_GUICtrlListView_AddItem()第一个返回值应该是0,1,2,3......!
我没看到GUICtrlCreateListView()索引时从3开始的,那为什么第一个值不是3呢?

blue_dvd 发表于 2012-11-10 20:01:45

本帖最后由 blue_dvd 于 2012-11-10 20:03 编辑

回复 3# annybaby
刚才又仔细看了你的解释,你说得没错!做一下笔记!再次多谢annybaby!

annybaby 发表于 2012-11-10 20:12:22

回复 6# blue_dvd


    哈哈,我也成高手了,第一次听说…

没有帮助文档和专用编辑器,很简单的程序我也写不出来…

blue_dvd 发表于 2012-11-10 20:15:01

回复 3# annybaby
代码是自己写的,在是研究别人代码,想修改时总是不是要的值,所以才改写了一段测试代码,来检查这两个语句的值!我再开个问题!希望指教!
页: [1]
查看完整版本: ListView关于返回值问题?[已解决]