请问listview中每行如何读取到input控件中,急用,谢谢!!
如题,请问listview中每行如何读取到input控件中,急用,谢谢!! _GUICtrlListBox_XXXXX相关的一系列函数就可以了. _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
$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,
太多坛友提问的问题其实都可以自己从帮助文件找
再说,也有汉化版了 如何读取到input控件
GUICtrlSetData($Input , $aItem[$i])
这里牵涉到数组问题了,自行尝试解决 谢谢 狼兄!!!我的问题解决了一部分
目前存在的困难是:双击listview中某行条目,其就自动将各列内容 如 张飞|赵云|关羽|刘备 提取到
input1,input2,input3,input4
烦给个思路,谢谢。 #include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
Global $aItem, $input
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 = GUICtrlCreateinput("", 2, 200, 100, 25)
$input = GUICtrlCreateinput("", 2, 230, 100, 25)
$input= GUICtrlCreateinput("", 2, 260, 100, 25)
$input= 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
GUICtrlSetData($input[$i],$aItem[$i])
Next
Case $NM_RCLICK ; 右击
;~ ...
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY关键思路:
1.利用数组创建input控件:$input,方便在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.万变不离其中,对于函数的灵活运用和其他函数交叉运用才是关键中的关键 太感谢了,解了燃眉之急。。。看来自己还有好多不足,例如注册事件等。。再次谢谢。元老就是元老。
呵呵,心中又有点问题烦劳提示:我listview内容是从ini文件中提取出来的,但是我想做个功能,就是如上
输入张飞,点击搜索 便可搜索到张飞所在列表字段,并将字段所有内容自动提取到各个INPUT框中,若再点搜索,则可如上顺序提取下一个含张飞的字段内容,知道最后一个提示搜索完毕。
可能有点麻烦,正在思考学习中。。大侠若有简洁思路烦劳再提示一下
无论如何。真是发自肺腑的说一声。。。谢谢。。。 本帖最后由 netegg 于 2010-5-17 23:20 编辑
去玩数据库吧,把数据导入数据库,一个查询全出来 #include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
Global $aItem, $input
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 = GUICtrlCreateInput("张飞", 80, 170, 100, 25)
$Button = GUICtrlCreateButton('开始搜索', 200, 170, 90, 25)
$input = GUICtrlCreateInput("", 2, 200, 100, 25)
$input = GUICtrlCreateInput("", 2, 230, 100, 25)
$input = GUICtrlCreateInput("", 2, 260, 100, 25)
$input = 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), $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
GUICtrlSetData($input[$i], $aItem[$i])
Next
EndFunc ;==>setinput
关键:
_GUICtrlListView_FindInText和变量$Index 与 $n对比判断
解决问题:
输入关键字‘飞’或‘张飞’,点击开始搜索
第一次点击,含关键字的第一个字段自动读取各INPUT
再点搜索,提取下一个含关键字的字段自动读取各INPUT
...如此循环
直到最后一个则提示搜索完毕 出差了几天,回来一看,真好,谢谢狼兄。真是越来越痴迷AUTOIT
谢谢大侠。 版主麻烦将此贴结掉。谢谢 顶贴、回帖、拿分、走人!url 请问lynfr8一下你发的代码中变量怎么不用声明就可以用啊
{:face (396):} 请问lynfr8一下你发的代码中变量怎么不用声明就可以用啊
lllangxx 发表于 2010-6-6 11:35 http://www.autoitx.com/images/common/back.gif变量的声明
AutoIt 中使用关键字 Dim, Local 和 Global 来声明并创建变量:
Dim $var1
还可以像下面这样一次声明多个变量:
Dim $var1, $myvariable
另外还可以不先声明某个变量而直接对其赋值, 但最好还是声明一下.
$var1 = "abc123"
可是上面的代码中你只声明的几个变量
如$n = 0
$ListView1
$Msg
$WM_NOTIFY
这些都没有进行声明,运行却正常这是怎么回事
页:
[1]
2