找回密码
 加入
搜索
查看: 6259|回复: 16

[GUI管理] 请问listview中每行如何读取到input控件中,急用,谢谢!!

 火.. [复制链接]
发表于 2010-5-16 12:18:00 | 显示全部楼层 |阅读模式
如题,请问listview中每行如何读取到input控件中,急用,谢谢!!
发表于 2010-5-16 12:35:37 | 显示全部楼层
_GUICtrlListBox_XXXXX  相关的一系列函数就可以了.
发表于 2010-5-16 22:36:30 | 显示全部楼层
_GUICtrlListView_GetItemTextArray
获取全部列表视图项
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
Global $aItem, $sText, $hListView
GUICreate("ListView Get Item Text Array", 400, 300)
$hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
GUICtrlCreateListViewItem("line1|data1|more1", $hListView)
GUICtrlCreateListViewItem("line2|data2|more2", $hListView)
GUISetState()
; 获取项目 2 的文本
$aItem = _GUICtrlListView_GetItemTextArray($hListView, 1)
For $i = 1 To $aItem[0]
        $sText &= StringFormat("Column[%2d] %s", $i, $aItem[$i]) & @LF
Next
MsgBox(4160, "Information", "Item 2 (All Columns) Text: " & @LF & @LF & $sText)
; 循环至用户退出
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
希望能详细看看_GUICtrlListView和_GUICtrlTreeView这两个重点UDF,
太多坛友提问的问题其实都可以自己从帮助文件找
再说,也有汉化版了

评分

参与人数 1金钱 +25 收起 理由
afan + 25

查看全部评分

发表于 2010-5-16 22:39:53 | 显示全部楼层
如何读取到input控件

GUICtrlSetData($Input , $aItem[$i])
这里牵涉到数组问题了,自行尝试解决
 楼主| 发表于 2010-5-17 12:13:42 | 显示全部楼层
谢谢 狼兄!!!我的问题解决了一部分
目前存在的困难是:双击listview中某行条目,其就自动将各列内容 如 张飞|赵云|关羽|刘备 提取到
input1,input2,input3,input4
烦给个思路,谢谢。
发表于 2010-5-17 16:19:06 | 显示全部楼层
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
Global $aItem, $input[5]
GUICreate("ListView Get Item Text Array 简单应用", 400, 320)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
$ListView1 = GUICtrlCreateListView("col1|col2|col3|col4", 2, 2, 394, 168)
GUICtrlCreateListViewItem("张学友|刘德华|黎明|郭富城", $ListView1)
GUICtrlCreateListViewItem("张飞|赵云|关羽|刘备", $ListView1)
$input[1] = GUICtrlCreateinput("", 2, 200, 100, 25)
$input[2] = GUICtrlCreateinput("", 2, 230, 100, 25)
$input[3]= GUICtrlCreateinput("", 2, 260, 100, 25)
$input[4]= GUICtrlCreateinput("", 2, 290, 100, 25)
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()

Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)
        Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
        Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
        If @error Then Return $GUI_RUNDEFMSG
        $IDFrom = DllStructGetData($tagNMHDR, 2)
        $Event = DllStructGetData($tagNMHDR, 3)
        $tagNMHDR = 0
        Switch $IDFrom;选择产生事件的控件
                Case $ListView1
                        Switch $Event; 选择产生的事件
                                Case $NM_CLICK ; 左击
;~                                         ...
                                Case $NM_DBLCLK ; 双击
                                        $Index = _GUICtrlListView_GetSelectedIndices($ListView1); 获取被选的索引
                                        If Not StringLen($Index) Then; 判断是否选定Item
                                                MsgBox(0, "", "未选定")
                                                Return
                                        EndIf
                                        $aItem = _GUICtrlListView_GetItemTextArray($ListView1, Number($Index))
                                        For $i = 1 To $aItem[0]
GUICtrlSetData($input[$i],$aItem[$i])
Next                
                                Case $NM_RCLICK ; 右击
;~                                         ...
                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
关键思路:
1.利用数组创建input控件:$input[5],方便在for next循环里写入数据
2.注册鼠标点击控件ListViewItem事件:GUIRegisterMsg和WM_NOTIFY,此2函数经常应用,论坛例子非常多,必须掌握
3.获取双击被选的索引_GUICtrlListView_GetSelectedIndices()得到索引后用_GUICtrlListView_GetItemTextArray获取控件文字写入数组$aItem[$i]
4.通过循环语句GUICtrlSetData($input[$i],$aItem[$i])达到最终目的:循环写入input1,input2,input3,input4
5.万变不离其中,对于函数的灵活运用和其他函数交叉运用才是关键中的关键

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-5-17 22:47:18 | 显示全部楼层
太感谢了,解了燃眉之急。。。看来自己还有好多不足,例如注册事件等。。再次谢谢。元老就是元老。

呵呵,心中又有点问题烦劳提示:我listview内容是从ini文件中提取出来的,但是我想做个功能,就是如上
输入张飞,点击搜索 便可搜索到张飞所在列表字段,并将字段所有内容自动提取到各个INPUT框中,若再点搜索,则可如上顺序提取下一个含张飞的字段内容,知道最后一个提示搜索完毕。
可能有点麻烦,正在思考学习中。。大侠若有简洁思路烦劳再提示一下
无论如何。真是发自肺腑的说一声。。。谢谢。。。
发表于 2010-5-17 23:19:15 | 显示全部楼层
本帖最后由 netegg 于 2010-5-17 23:20 编辑

去玩数据库吧,把数据导入数据库,一个查询全出来
发表于 2010-5-18 02:55:47 | 显示全部楼层
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
Global $aItem, $input[5]
GUICreate("ListView Get Item Text Array 简单应用", 400, 320)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
$ListView1 = GUICtrlCreateListView("col1|col2|col3|col4", 2, 2, 394, 168)
GUICtrlCreateListViewItem("张学友1|刘德华|黎明|郭富城", $ListView1)
GUICtrlCreateListViewItem("张飞1|赵云|关羽|刘备", $ListView1)
GUICtrlCreateListViewItem("张学友2|刘德华|黎明|郭富城", $ListView1)
GUICtrlCreateListViewItem("张飞2|赵云|关羽|刘备", $ListView1)
GUICtrlCreateListViewItem("张学友3|刘德华|黎明|郭富城", $ListView1)
GUICtrlCreateListViewItem("张飞3|赵云|关羽|刘备", $ListView1)
$label = GUICtrlCreateLabel("搜索内容:", 25, 174, 100, 25)
$input[0] = GUICtrlCreateInput("张飞", 80, 170, 100, 25)
$Button = GUICtrlCreateButton('开始搜索', 200, 170, 90, 25)
$input[1] = GUICtrlCreateInput("", 2, 200, 100, 25)
$input[2] = GUICtrlCreateInput("", 2, 230, 100, 25)
$input[3] = GUICtrlCreateInput("", 2, 260, 100, 25)
$input[4] = GUICtrlCreateInput("", 2, 290, 100, 25)
GUISetState()
$n = 0
While 1
        $Msg = GUIGetMsg()
        Select
                Case $Msg = $GUI_EVENT_CLOSE
                        Exit
                Case $Msg = $Button
                        $Index = _GUICtrlListView_FindInText($ListView1, GUICtrlRead($input[0]), $n)
                        If $Index < $n Then
                                MsgBox(0, 0, '搜索完毕')
                                $n = 0
                        Else
                                $n = $Index
                                setinput()
                        EndIf
        EndSelect
WEnd

Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)
        Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
        Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
        If @error Then Return $GUI_RUNDEFMSG
        $IDFrom = DllStructGetData($tagNMHDR, 2)
        $Event = DllStructGetData($tagNMHDR, 3)
        $tagNMHDR = 0
        Switch $IDFrom;选择产生事件的控件
                Case $ListView1
                        Switch $Event; 选择产生的事件
                                Case $NM_CLICK ; 左击
;~                                         ...
                                Case $NM_DBLCLK ; 双击
                                        $Index = _GUICtrlListView_GetSelectedIndices($ListView1); 获取被选的索引
                                        If Not StringLen($Index) Then; 判断是否选定Item
                                                MsgBox(0, "", "未选定")
                                                Return
                                        EndIf
                                        setinput()
                                Case $NM_RCLICK ; 右击
;~                                         ...
                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY


Func setinput()
        $aItem = _GUICtrlListView_GetItemTextArray($ListView1, Number($Index))
        For $i = 1 To $aItem[0]
                GUICtrlSetData($input[$i], $aItem[$i])
        Next
EndFunc   ;==>setinput
关键:
_GUICtrlListView_FindInText和变量$Index 与 $n对比判断
解决问题:
输入关键字‘飞’或‘张飞’,点击开始搜索
第一次点击,含关键字的第一个字段自动读取各INPUT
再点搜索,提取下一个含关键字的字段自动读取各INPUT
...如此循环
直到最后一个则提示搜索完毕

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

 楼主| 发表于 2010-5-26 18:59:46 | 显示全部楼层
出差了几天,回来一看,真好,谢谢狼兄。真是越来越痴迷AUTOIT
谢谢大侠。
 楼主| 发表于 2010-5-26 19:00:51 | 显示全部楼层
版主麻烦将此贴结掉。谢谢
发表于 2010-5-26 20:46:04 | 显示全部楼层
顶贴、回帖、拿分、走人!url
发表于 2010-6-6 11:35:51 | 显示全部楼层
请问lynfr8  一下你发的代码中变量怎么不用声明就可以用啊
发表于 2010-6-6 15:42:40 | 显示全部楼层
请问lynfr8  一下你发的代码中变量怎么不用声明就可以用啊
lllangxx 发表于 2010-6-6 11:35
变量的声明
AutoIt 中使用关键字 Dim, Local 和 Global 来声明并创建变量:
 Dim $var1

还可以像下面这样一次声明多个变量:
 Dim $var1, $myvariable

 另外还可以不先声明某个变量而直接对其赋值, 但最好还是声明一下.
  $var1 = "abc123"
发表于 2010-6-6 17:47:11 | 显示全部楼层
可是上面的代码中你只声明的几个变量
如$n = 0
$ListView1
$Msg
$WM_NOTIFY
这些都没有进行声明,运行却正常这是怎么回事
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-4 21:54 , Processed in 0.087745 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表