找回密码
 加入
搜索
查看: 1518|回复: 4

[AU3基础] _GUICtrlListView_FindInText

[复制链接]
发表于 2011-2-27 00:17:51 | 显示全部楼层 |阅读模式
搜索包含指定文本的项目
_GUICtrlListView_FindInText

参数

$hWnd 控件句柄
$sText 匹配文本
$iStart 开始进行搜索的项目索引(基于 0 ) 或者设置为 -1 从开始进行搜索. 指定项目排除在搜索之外..
$fWrapOK 如果为真, 且未找到匹配项, 搜索将从第一项继续
$fReverse 如果为真, 搜索将从 $iStart - 1 开始到 0. 如果 $fWrapOK = True 搜索将继续

这个函数查找‘a’的时候会匹配‘a’‘ab’‘abc’

怎样让它全字匹配:比如查找‘a’就匹配‘a’查找‘abc’就匹配‘abc’?
发表于 2011-2-27 00:27:31 | 显示全部楼层
本帖最后由 ceoguang 于 2011-2-27 00:31 编辑

本来查找ListView关键字就是完全匹配的,具体请查看LVM_GETITEMTEXT 消息
_GUICtrlListView_FindInText只是一个封装好的UDF,而不是内置函数.
原理是枚举所有Item,通过发送LVM_GETITEMTEXT消息来取字符.

Func _GUICtrlListView_FindInText($hWnd, $sText, $iStart = -1, $fWrapOK = True, $fReverse = False)

        Local $iCount = _GUICtrlListView_GetItemCount($hWnd)
        Local $iColumns = _GUICtrlListView_GetColumnCount($hWnd)
        If $iColumns = 0 Then $iColumns = 1

        If $fReverse And $iStart = -1 Then Return -1

        Local $sList
        If $fReverse Then
                For $iI = $iStart - 1 To 0 Step -1
                        For $iJ = 0 To $iColumns - 1
                                $sList = _GUICtrlListView_GetItemText($hWnd, $iI, $iJ)
                                If StringInStr($sList, $sText) Then Return $iI
                        Next
                Next
        Else
                For $iI = $iStart + 1 To $iCount - 1
                        For $iJ = 0 To $iColumns - 1
                                $sList = _GUICtrlListView_GetItemText($hWnd, $iI, $iJ)
                                If StringInStr($sList, $sText) Then Return $iI
                        Next
                Next
        EndIf

        If (($iStart = -1) Or Not $fWrapOK) And Not $fReverse Then Return -1

        If $fReverse And $fWrapOK Then
                For $iI = $iCount - 1 To $iStart + 1 Step -1
                        For $iJ = 0 To $iColumns - 1
                                $sList = _GUICtrlListView_GetItemText($hWnd, $iI, $iJ)
                                If StringInStr($sList, $sText) Then Return $iI
                        Next
                Next
        Else
                For $iI = 0 To $iStart - 1
                        For $iJ = 0 To $iColumns - 1
                                $sList = _GUICtrlListView_GetItemText($hWnd, $iI, $iJ)
                                If StringInStr($sList, $sText) Then Return $iI
                        Next
                Next
        EndIf

        Return -1
EndFunc   ;==>_GUICtrlListView_FindInText

看到没有?
将里面的StringInStr($sList, $sText)改为$sList==$sText就能达到了你的要求了.
 楼主| 发表于 2011-2-27 19:15:45 | 显示全部楼层
回复 2# ceoguang

$sList==$sText?不明白

麻烦你说得清楚一些,谢谢?
发表于 2011-2-27 19:22:31 | 显示全部楼层
版主说得不能再清楚了。照着改一下,该函数就变成一个符合你要求的函数了。
发表于 2011-2-27 19:22:56 | 显示全部楼层
版主说得不能再清楚了。照着改一下,该函数就变成一个符合你要求的函数了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 16:54 , Processed in 0.089397 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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